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

Вниз

Еще раз на счет Сокет Сервера   Найти похожие ветки 

 
Gliser   (2003-04-04 09:54) [0]

Добрый день, уважаемые мастера.
Я внимательно изучил конференцию, но так и не нашел ответа.
У меня есть программа сервер. Клиенты к ней подцеплены постоянно, т.е. постоянно посылают запросы. Как на сервере узнать какой именно клиент прислал запрос, для того чтобы не посылать ответ всем.
Спасибо!


 
Digitman ©   (2003-04-04 10:35) [1]

идентификатор клиента - это параметр Socket: TServerClientWinSocket в процедуре обработки события OnClientRead


 
Gliser   (2003-04-04 10:51) [2]

Спасибо.


 
Gliser   (2003-04-04 11:14) [3]

Я чувстую себя полным ламером, но я никак не могу найти через какое свойсто Socket: TServerClientWinSocket , определить номер содединениячтобы после использовать для Socket.Connections[..] в процедуре записи.


 
savva ©   (2003-04-04 12:44) [4]

если тебе нужен именно номер (число) - можно при подключении клиента его экземпляр сокета добавлять в TList а потом искать через IndexOf(Socket).


 
Digitman ©   (2003-04-04 12:59) [5]

список Socket.Connections[..] и есть список тех самых уникальных объектов Socket: TServerClientWinSocket, каждый из которых "родился" для тебя в событии OnClientConnect, и фигурирует во всех последующих событиях для клиента, ассоциированного с этим Socket: TServerClientWinSocket


 
Gliser   (2003-04-04 13:34) [6]

Я плохо объяснил. Попробую на примере. Допустим у меня три клиента подключены к серверу и постоянно общаюся с ним, т.е. для них уже соединения установлены. Сервер читает запросы клиентов с помощью процедуры ServerSocketClientRead. В данной процедуре все равно какой клиент прислал запрос. А мне бы хотелось знать кто 1, 2 или 3 клиент, чтобы ответ послать на соответсвующее Connections[1, 2 или 3]. Вопрос мой звучит так: как одназначно определить клиента в процедуре ServerSocketClientRead, чтобы можно было ему ответить?


 
Digitman ©   (2003-04-04 14:15) [7]


> В данной процедуре все равно какой клиент прислал запрос


как это "все равно" ? параметр Socket извещает тебя о конкретном клиенте, приславшем запрос !

когда тебе нужно сделать бродкаст всем прочим клиентам, кроме данного, та просто перебираешь в цикле по списку Connections[] всех клиентов, которые не равны данному Socket, и отправляешь им нужную инф-цию


 
panov ©   (2003-04-04 19:05) [8]

if Socket.Connections[index] = Socket then ...


 
nikkie ©   (2003-04-05 00:29) [9]

>if Socket.Connections[index] = Socket then ...
или что эквивалентно, но несколько быстрее работает
if False then ...
:)


 
nikus ©   (2003-04-05 05:50) [10]

В списке параметров процедуры ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket) можно заметить параметр Socket. Так вот, если ответ клиенту нужно послать в этой же процедурке, то вместо ServerSocket1.Socket.Connections[i].SendText(s) пишите Socket.SendText(s).
Если же ответ нужно слать в другой процедурке, то
1. Заведите глобальную переменную MySock : TCustomWinSocket;
2. В обработчике ServerSocketClientRead напишите MySock := Socket;
3. В нужном месте программы посылайте через MySock, то есть MySock.SendText(s);



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
1-13213
Project111
2003-05-26 20:53
2003.06.05
Компонент выбора каталога


3-13078
edicon
2003-05-17 00:37
2003.06.05
Ttable и Console


3-12998
Аноним
2003-05-19 01:00
2003.06.05
Кэширование изменений


7-13481
HanIP
2003-04-01 16:00
2003.06.05
COM и USB


8-13334
Alexanders
2003-02-22 13:28
2003.06.05
Проигрывание и навигация по wav файлу из памяти