Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2012, 10:33   #1
Братишка^_^
Пользователь
 
Регистрация: 07.04.2012
Сообщений: 35
Радость Совет в сокетах.

Здравствуйте, я бы хотел услышать совет о некоторых вещах по сокетам.
У меня имеется сервер и клиент. Я сделал авторизацию на сервере. НО, Если , авторизуется несколько клиентов, то там беда полнейшая. Для понятия, выложу кусок кода, но не совсем коректный.
Клиент :
Код:
Клиент.Сокет.ОтправитьТекст('префикс'+логин-едит.текст);
слип(100); 
Клиент.Сокет.ОтправитьТекст('префикс'+пароль-едит.текст);
Задержка для того, что бы не отправилось
префикслогинпрефикспароль.
Вообщем, здоровенная ошибка.
Вообщем, я решил изменить этот алгоритм.
Будет отправляться логин=пароль. Будет копироваться логин до знака ровно(уже сделано) А вот пароль скопировать почему-то не получилось, я его спарсил :D Вообщем, это на сервере обрабатывается и посылается клиенту текст, что пасворд гуд. А если нет, то пасвор нот гуд)
А теперь, суть вопроса :
Как я выше отписал, если не сколько клентов одновременно подключается, то выходит каша и авторизируются с не подлинным логином и паролем. АХ да, забыл еще сказать. Отправляется отчет о пароле и логине на ип адресс, который поступал самый последний. Можно как-нибудь разделить их ? Т.е, пришла одна инфа, запихнул его в поток какой-нибудь и там уже общаешься с клиентом, перекидываясь инфой.
Как это можно устроить? Если вопрос не слишком понятен, могу рассказать подробнее или в аське показать код программы. Сюда , извините выкладывать не буду, слишком жаден :D
Братишка^_^ вне форума Ответить с цитированием
Старый 07.04.2012, 10:43   #2
Братишка^_^
Пользователь
 
Регистрация: 07.04.2012
Сообщений: 35
По умолчанию

Я допер, что вопрос не понятен ... :D
Как записать клиента когда он прислал данные и отослать без лишних проблем ему, а ни кому - то другому.
Братишка^_^ вне форума Ответить с цитированием
Старый 07.04.2012, 12:10   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Аналогичная проблема стояла. Завязал с сокетами, перешел на ИНДИ. Разрабатывать стало попроще - там есть учет сессий. Всего рассказать не могу - у меня не многопользовательская система авторизации, но попробуй погугли в сторону Индейцев.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2012, 12:55   #4
Братишка^_^
Пользователь
 
Регистрация: 07.04.2012
Сообщений: 35
По умолчанию

Не могли бы вы добавить меня в аське? Есть пару вопросов, если не сложно)
Братишка^_^ вне форума Ответить с цитированием
Старый 07.04.2012, 13:13   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Эм... от тут малость сложность... Файер мой нужно настраивать. Чето он ICQ гасит, понять не могу. Лучше пиши сюда, х.з. когда я свой антивирь правильно настрою.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2012, 13:19   #6
Братишка^_^
Пользователь
 
Регистрация: 07.04.2012
Сообщений: 35
По умолчанию

Ну, вообщем залез я в Индни,написал мельком TCP клиент и сервер. Но, тут байда. Он не хочет мне поддаваться. Может все таки как-то на сокетах можно сделать распределитель клиентов? А то я в инди вообще не бум - бум. А в инете ради инди ползать - лень=D

Мне главное на ТЦП.
Как принимать\Отправлять сообщения серверу, клиенту.
Как распознать Клиентов. Все, больше мне не чего не нужно)

Последний раз редактировалось Stilet; 07.04.2012 в 19:51.
Братишка^_^ вне форума Ответить с цитированием
Старый 07.04.2012, 13:45   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ИМХО, использовать событие TServerSocket.OnGetSocket .
создать свой подкласс и его использовать:
Код:
type
  TMyClient=class(TServerClientWinSocket)
   public
    UserName,Password:string;
    Stream:TStream;
    constructor Create;
    destructor Destroy; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TMyClient.Create;
begin
 Stream:=TWinSocketStream.Create(Self,500);
end;

destructor TMyClient.Destroy;
begin
 Stream.Free;
end;

procedure TForm1.ServerSocket1GetSocket(Sender: TObject; Socket: Integer;
  var ClientSocket: TServerClientWinSocket);
begin
 ClientSocket:=TMyClient.Create;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var C:TMyClient;
begin
 C:=Socket as TMyClient;
 C.UserName:=C.ReceiveText;//естественно надо смотреть текущий этап работы, не постоянно же логин читать
end;
как то так

еще можно TTcpServer и TTcpClient применить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.04.2012, 14:08   #8
Братишка^_^
Пользователь
 
Регистрация: 07.04.2012
Сообщений: 35
По умолчанию

Кхм.. что - то я не догнал)
Код:
C:=Socket as TMyClient;
 C.UserName:=C.ReceiveText;
Тут мы получили от клиента текст, а как ему ответ написать?
Братишка^_^ вне форума Ответить с цитированием
Старый 07.04.2012, 16:08   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

все методы такие же как и у обычного сокета.
C.SendText.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.04.2012, 23:03   #10
Братишка^_^
Пользователь
 
Регистрация: 07.04.2012
Сообщений: 35
По умолчанию

Да положение тоже самое осталось. Уныло (
Братишка^_^ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
и опять о сокетах xil C# (си шарп) 1 30.09.2011 17:39
Чат на сокетах yandzee Общие вопросы C/C++ 6 11.12.2010 14:50
UDP в сокетах HTL Работа с сетью в Delphi 2 02.04.2010 21:04
Переадресация на сокетах yres51447 Работа с сетью в Delphi 2 29.03.2010 15:01
Авторегистратор на сокетах Astron Работа с сетью в Delphi 5 11.03.2010 12:06