Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Опять же сокеты


Timon ©   (2002-02-15 18:58:00) 

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

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

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

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


Timon   (2002-04-08 17:15:00) [1]

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

procedureTmainf.clientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; varErrorCode: Integer);
begin
ifErrorEvent=eeСonnect then
begin
Socket.Close;
client.Open;
ErrorCode:=0;
end;
end;


Ghost.   (2002-03-14 17:08:00) [2]

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


Timon   (2002-03-14 15:28:00) [3]

Ghost

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


Ghost.   (2002-02-18 13:09:00) [4]

Я просто не знаю как этот компонент устроен, но думаю, что если написать в начале процедуры чтонить типа
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-02-18 12:59:00) [5]

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


Ghost.   (2002-02-16 09:11:00) [6]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо