Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Еще раз на счет Сокет Сервера [D5, Win95/98, NT4]


Gliser ©   (2003-04-04 09:54:00) 

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


nikus   (2003-04-05 05:50:00) [1]

В списке параметров процедуры 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);


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

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


panov   (2003-04-04 19:05:00) [3]

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


Digitman   (2003-04-04 14:15:00) [4]


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


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

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


Gliser   (2003-04-04 13:34:00) [5]

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


Digitman   (2003-04-04 12:59:00) [6]

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


savva   (2003-04-04 12:44:00) [7]

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


Gliser   (2003-04-04 11:14:00) [8]

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


Gliser   (2003-04-04 10:51:00) [9]

Спасибо.


Digitman   (2003-04-04 10:35:00) [10]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо