Главная страница
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.02 c
14-13459
zyurik
2003-05-19 19:57
2003.06.05
FastDIB


14-13422
Holy
2003-05-19 13:07
2003.06.05
Использовать ли классы


6-13347
Gliser
2003-04-04 09:54
2003.06.05
Еще раз на счет Сокет Сервера


14-13428
goobit
2003-05-19 12:40
2003.06.05
Зачем нужены DCP-файлы?


14-13431
Кузькина мать
2003-05-17 12:03
2003.06.05
Supreme 2 набирает популярность