Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2012.04.08;
Скачать: [xml.tar.bz2];

Вниз

Идентификация пользователей при работе с Сокетами (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
2-1323897006
cyber-pilot
2011-12-15 01:10
2012.04.08
Рисование на канве в заданном прямоугольнике


15-1323404238
vajo
2011-12-09 08:17
2012.04.08
Удаленный рабочий стол


15-1322771404
Юрий
2011-12-02 00:30
2012.04.08
С днем рождения ! 2 декабря 2011 пятница


2-1324044551
Chuck Bass
2011-12-16 18:09
2012.04.08
проверить пуста ли строка


15-1322861999
константин
2011-12-03 01:39
2012.04.08
jvcl





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский