Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.08;
Скачать: CL | DM;

Вниз

Идентификация пользователей при работе с Сокетами (Delphi)   Найти похожие ветки 

 
xarfan   (2009-10-05 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   (2009-10-05 15:51) [1]

Можно по IP адресу идентифицировать прямо при событии ServerSocket1ClientRead.

Можно формат сообщения свой создать, где первие N-байт будут идентификатором.


 
CrytoGen   (2009-10-05 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);



Страницы: 1 вся ветка

Текущий архив: 2012.04.08;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.008 c
2-1324039063
ProgRAMmer Dimonych
2011-12-16 16:37
2012.04.08
WSAWaitForMultipleEvents не отпускает по FD_ACCEPT


15-1323234832
Генсек
2011-12-07 09:13
2012.04.08
Законность. Программа использует другую программу.


15-1323203403
Юрий
2011-12-07 00:30
2012.04.08
С днем рождения ! 7 декабря 2011 среда


8-1222099174
ruf
2008-09-22 19:59
2012.04.08
Использовать свои шрифты


2-1324104343
ШК
2011-12-17 10:45
2012.04.08
Обмен данными между приложениями через интернет