Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
3-13100
Pat
2003-05-18 23:24
2003.06.05
Опять Access+ADO под ХР


1-13284
Vulko
2003-05-17 22:41
2003.06.05
Как вызвать стандартный диалог выбора цвета


6-13351
cypher
2003-04-04 00:51
2003.06.05
автоматизация регистрации


14-13398
race1
2003-05-17 15:20
2003.06.05
php


3-13058
noteens
2003-05-15 19:40
2003.06.05
TDBGrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский