Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.06.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-55216
inc(665)
2002-06-04 23:07
2002.06.17
Хехехе


7-55324
RM
2002-03-20 21:01
2002.06.17
Как узнать дату BIOS из под Windows XP?


1-55064
SleD
2002-06-02 14:13
2002.06.17
Насчёт КРУГЛЫХ картинок


14-55280
Дмитрий_Б
2002-05-14 17:21
2002.06.17
Удаленные записи ??


1-55061
cult
2002-06-05 17:47
2002.06.17
прорисовщик компонента





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский