Форум: "Сети";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
ВнизЕще раз на счет Сокет Сервера Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c