Конференция "Сети" » Идентификация пользователей при работе с Сокетами (Delphi) [D7, WinXP]
 
  • xarfan (05.10.09 00:42) [0]
    Имеется клиент-серверное приложение (на сокетах). Сервер одновременно работает с несколькими пользователями, отсюда встает вопрос идентификации.

    Например, мы имеем событие ServerSocket1ClientRead, получили от клиента какой-то текст, далее нужно определить, кому же отсылать ответ. Для идентификации имеется Socket.Data, но это указатель, соответственно свои проблемы (нельзя просто присвоить значение, например, счетчика), в каких переменных хранить значения, на которые будут указывать эти указатели =) (Причем это дело еще должно быть динамическое, потому как клиентов может быть много).

    На данный момент проблема решена так - при ServerSocket1Accept заношу запись в лог (БД), далее Socket.Data:=@...Fields[0].AsInteger(Это счетчик, ключевое поле); Ну, а потом при получении данных проверяем поле Data, и делаем поиск:

    for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
    if ServerSocket1.Socket.Connections[i].Data = Socket.Data
    then begin
            {Как нашли - чего-то отсылаем}
           end;

    Уж больно это дело громоздко и неудобно. Нет ли способа попроще? Заранее спасибо.
  • macrodenms (05.10.09 15:51) [1]
    Можно по IP адресу идентифицировать прямо при событии ServerSocket1ClientRead.

    Можно формат сообщения свой создать, где первие N-байт будут идентификатором.
  • CrytoGen (05.10.09 17:54) [2]
    в указателях достаточно просто хранить объекты, потому как переменная с которой вы работаете как с объектом - указатель.
    ну и достаточно просто использовать записи типа:

    TMyData = record
    a,b : Integer;
    end;
    PMyData = ^TMyData;
    ...
    var
     mydata : PMyData;
    ...
    begin
    ...
    New(mydata);
    Socket.Data:=mydata;
    ...
    mydata:=Socket.Data;
    end;



    ну и естественно где-то при закрытии соединения:
    Dispose(Socket.Data);

 
Конференция "Сети" » Идентификация пользователей при работе с Сокетами (Delphi) [D7, WinXP]
Есть новые Нет новых   [134437   +29][b:0][p:0.001]