Главная страница
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.016 c
14-55291
lipskiy
2002-05-15 01:01
2002.06.17
К теме об обучении: Люди, расскажите, как хуки делаются?


7-55321
arny(if)
2002-03-18 23:01
2002.06.17
Серийные номера


3-54966
alexa
2002-05-15 10:56
2002.06.17
сложный запрос


3-55035
Ziplex
2002-05-24 11:09
2002.06.17
где можно взять компонент Fast Report


8-55219
Maxus
2002-01-08 16:45
2002.06.17
проигрывать два Wav файла одновременно