Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.13;
Скачать: CL | DM;

Вниз

Что-то странное с сокетами   Найти похожие ветки 

 
YOjick ©   (2002-02-28 15:50) [0]

Есть удалённый сервер ServerSocket и несколько клиентов. Для идентификации вновь присоединившегося клиента сервер посылает команду клиентам через ServerSocket1.Socket.SendText , чтобы вновь присоединившийся клиент сообщил некие данные о себе (IP, например). Работает. Но попытка послать такой-же Broadсast в обработчике дисконнекта вызывает ошибку. Проходит только отправка сообщения конкретному клиенту через ServerSocket1.Socket.Connections[i].SendText . Почему так происходит? Ведь если присоединяется новый клиент - то и без .Connections[i]. проходит!


 
Polevi ©   (2002-02-28 17:28) [1]

код дисконнекта приведи


 
Digitman ©   (2002-03-01 09:16) [2]

>>"послать такой-же Broadсast в обработчике дисконнекта вызывает ошибку"

1. Кроме как о событии дисконнекта конкретного клиента ни о каком ином "дисконнекте" не может идти и речи. А, значит, речь идет об обработке события OnClientDisconnect

Читаем хэлп и читаем :
"OnClientDisconnect ... occurs when one of the connections to a client socket is closed"

Черным по белому написано, что событие возникает уже после того, как клиент отключился, т.е. - по факту дисконнекта клиента. О какой отправке сообщения клиенту может идти речь, когда его уже не существует ?

2. Где ты вообще в описании TServerSocket выискал нечто, что позволило бы судить о реализации им встроенного broadcast-механизма ? На основании чего ты утверждаешь, что метод ServerSocket1.Socket.SendText выполняет широковещательную рассылку текста ?



 
SerVS - S   (2002-03-01 16:22) [3]

Обрабатывать дисконект ты хочешь для того что знать кто ушел? Если да, то читай дальше :)
Идея: "Нужно не ловить кто ушел, а посмотреть кто остался".
Для этого:
1. Инфу про клиента нужно хранить в ДЕЙТ. Это свойство есть у каждого потока.
2. В обработчике дисконекта пишешь нечто вроде:
ClientList.Clear;
for i := 0 to ServerSocket1.Socket.Connections do
ClientList.Add(TYourObj(ServerSocket1.Socket.Connected[i].Data).UserName);
или то что тебе нужно.



Страницы: 1 вся ветка

Текущий архив: 2002.05.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.042 c
7-39875
Basaev
2002-02-03 04:49
2002.05.13
Как зделать чтобы рабочий стол не запускался


3-39676
борисыч
2002-04-18 07:50
2002.05.13
Есть подозрение, что многопоточность BDE, IBX - миф.


4-39905
Ray
2002-03-12 14:03
2002.05.13
Почему слетает HOOK на клавиатуру!?


1-39736
MaGG
2002-04-27 12:48
2002.05.13
Как в программе выполнить копирование файла?


1-39688
sammy
2002-04-28 11:21
2002.05.13
Ошибка в ассемблере