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

Вниз

Опять же сокеты   Найти похожие ветки 

 
Timon ©   (2002-02-15 18:58) [0]

Вобщем, проблема в следующем. Есть сокет-клиент далее называемый Client. Он должен соединится с сервером, то-есть ждать появления сервера. Для этого сделано так

procedure Tmainf.clientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
if ErrorEvent=eeСonnect then
begin
client.Open;
ErrorCode:=0;
end;
end;

Впринципе все неплохо работает, если сервер еще не появлялся. Но если сервер появился а потом был закрыт, то соединение не востанавливается. И это не смотря на то что при событии onDisconnect client.active устанавливается в true.

Всем зарание огромный thanks.


 
Ghost. ©   (2002-02-16 09:11) [1]

Поставь процедуру на таймер...тогдаи не ошибешься..у меня именно так работает и клиенты всегда четко дожидаются


 
Timon ©   (2002-02-18 12:59) [2]

Ghost, я уже ставил на таймер. Получается вообще лажа. Он открывает столько потоков, что в конце концов виснет к чертовой матери.


 
Ghost. ©   (2002-02-18 13:09) [3]

Я просто не знаю как этот компонент устроен, но думаю, что если написать в начале процедуры чтонить типа
if ErrorEvent<>eeСonnect then exit;
то не может он много потоков открыть
вот так у меня написанно и причем еще ниодной ошибки небыло

if WSocketServer1.ClientCount>0 then exit;
WSocketServer1.close;
WSocketServer1.Port:="3334";
WSocketServer1.Addr:="0.0.0.0";
WSocketServer1.Listen;


 
Timon ©   (2002-03-14 15:28) [4]

Ghost

Так ты это для сервера написал. А что если клиент у клиента active стоит на false. В таком случае сервер его и не видит.
Я то и спрашиваю, как в таком случае клиенту active на true поставить?


 
Ghost. ©   (2002-03-14 17:08) [5]

Тада подругому..я сделал, что сервер рассылает широовещательные сообщения(вместе со служебной информацией) по всей сети, а в клиентах наооборот UDP серверы стоят, ак тока клиент такое сообщение поймал и соотверственно получил адрес сетвера вот тогда уже через другой соет осуществляет TCP соединения, а предыдущий сокет если ненадо можно закрыть, а можно и использовать..зависит от назначения проги..кстати не громоздко но очень удобно получается...где сервер не запустишь..клиенты его сразу находят


 
Timon ©   (2002-04-08 17:15) [6]

Ghost, мда хитро. Но все оказалось проще. Оказывается делфя сначала открывает отдельный поток на сокет, а уже потом, в случае удачного открытия ассоциирует его с пользовательским сокетом. А если не удачно, то закрыть этот поток нужно программно.
Исправленный код выглядит так

procedure Tmainf.clientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
if ErrorEvent=eeСonnect then
begin
Socket.Close;
client.Open;
ErrorCode:=0;
end;
end;




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

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

Наверх




Память: 0.48 MB
Время: 0.015 c
1-55141
Dennn_is
2002-06-03 15:23
2002.06.17
Про DLL


1-55052
MARcoDEN
2002-06-01 10:56
2002.06.17
Поиск в реестре


1-55180
bmai
2002-06-03 15:16
2002.06.17
Вопрос по ActionList


1-55071
PVR
2002-06-02 18:34
2002.06.17
Как найти нужную процедуру в BPL


1-55075
ЗЛ
2002-06-03 14:26
2002.06.17
сть компонент StringGrid и у меня она состоит из одной строчки с