![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отправка данных из ServerSocket [D5, WinXP]
BlackSun © (2002-08-12 12:57:00)Делаю подобие чата, и с сервера пытался сделать
serversocket1.socket.SendText("MyText");
но не получилось, тогда поискав информации нашел следующее
ServerSocket1.Socket.Connections[0].SendText("MyText");
но в моем случае это не работало, тогда я попробовал
ServerSocket1.Socket.Connections[1].SendText("MyText");
^^^
и все заработало.
Так вот как узнать, какое соединение по счету считается активным? Ведь не всегда и не везде будет 1...
Digitman (2002-08-13 08:23:00) [1]>Blacksun
Факт установления коннекта с очередным клиентом фиксируется событием OnClientConnect(). Второй параметр процедуры обработки события - Socket: TCustomWinSocket - идентифицирует клиента в т.ч. как новый элемент, занесенный в список Connections[].
Отсюда и пляши.
kosmach (2002-08-13 07:43:00) [2]Извините, если помешаю, но можно здесь же задать немного другой вопрос. Как, например, в обработчике события onServerSocketClientDisconnect определить какой именно по счету клиент сейчас отключился? Там есть параметр Socket, но у него подходящих свойств я не нашел, может нитуда смотрел, подскажите пожалуйста.
Между прочим, Blacksun, этот самый параметр Socket в событиях ServerSocket, вполне может облегчить твою жизнь.
cyborg (2002-08-12 21:17:00) [3]А это уже тебя нужно спросить, что ты там ещё подключаешь?
Код покажи хотябы, как ты свой сервер включаешь и как клиента к нему подключаешь?
Blacksun (2002-08-12 19:41:00) [4]А вот такой вопрос... почему при соединении клиента с сервером он показывает что в наличии 2 соединения, а не 1?
Blacksun (2002-08-12 19:32:00) [5]Я вообще не понимаю, что за клиент подключен под [0], должен быть мой, а мой получается под [1].
А клиента я никак не идентифицирую, просто у сервера открыт порт и клиент сам подключается. Поэтому я и не могу понять под каким индексом в массиве этот клиент. Может тогда подскажете, как определить?
По теории он должен быть [0], а на практике получается [1]. А все подряд перебирать не выход.
Malder (2002-08-12 19:12:00) [6]BlackSun, ты, видимо, не понимаешь. К ServerSocket могут подключиться много клиентов. Не нужно ставить 100 сервер сокетов для 100 клиентов (тем более, ты не сможешь этого сделать). А Connections это массив, где 0 - первый подключившийся, 1 - второй и т.д.
cyborg (2002-08-12 18:03:00) [7]Разошлёт всем клиентам:
For I:=MainForm.ServerSocket1.Socket.ActiveConnections-1 downto 0 do
Begin
MainForm.ServerSocket1.Socket.Connections[I].SendText("MyText");
End;
Ghost. (2002-08-12 17:15:00) [8]Ты правильно тебе говорят при подключении клиентов как нибудь идентифицируй и тогда понятно будет кому слать
Digitman (2002-08-12 16:38:00) [9]А даже если бы и перебирал - каков был бы у тебя критерий выхода из цикла перебора активных соединений ?
Ты вообще кому конкретно сообщение-то шлешь ? Какому клиенту ? Как ты его вообще идентифицируешь на сервере при установлении с ним (клиентом) логического коннекта ?
Blacksun (2002-08-12 16:19:00) [10]Но как мне узнать, какой индекс ставить? Не перебирать же их по порядку? Когда использую Connections[0] ничего не получается, а когда Connections[1], то все работает, но это от случая к случаю...
Digitman (2002-08-12 13:20:00) [11]Все соединения, зафиксированные в момент обращения к св-ву Connections[], сервером считаются логически активными.
Логически неактивных соединений, с т.з. сервера, в этом списке нет и быть не может