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

Вниз

Разрыв связи между сервером и клиентом по вине сервера.   Найти похожие ветки 

 
Dimich1978   (2002-09-17 09:19) [0]

Т.е. сервер перегрузился например. Подскажите мастера , как можно клиента заново сконнектить с сервером в таком случае. Если можно помогите кодом, нужно срочно(что писать в сервере и при каком событии и действия клиента и при каком событии). Заранее очень благодарен.


 
Ghost.   (2002-09-17 09:54) [1]

вриантов может быть много..придумай сам удобный для себя...тебе посоветуешь ты скажешь тебе не так надо...Например можно, чтобы сервер рассылал там хоть широковещательные сообщения типа "Я пришел" а клиент на это реагировал и соединялся..связь разорвалась ждет сообщения и так они всегда другдруга найдут..


 
Dimich1978   (2002-09-17 13:05) [2]

А можно немного кодика....я тут только с сетями связался. А способ любой подойдети мне не важно.


 
Ghost.   (2002-09-17 15:51) [3]

Вопервых я не использую стандартные компоненты..вовторых мне некогда код писать...специально...возми из Делфи пример передачи данных по UDP посылай широковещательное или какое там тебе лучше сообщение..с сделай реакцию клиента на него..например соединиться как соединились сервер ничего не посылает...


 
Manulo   (2002-09-17 16:55) [4]

У клиента есть событие OnDisconnect (по моему)... На это событие повесь таймер, который будет каждые три(например!) секунды пытаться восстановить связь... Козда восстановит (событие OnConnect) отключи таймер, и всё! Проверено в инетрнет кафе!!!


 
Dimich1978   (2002-09-17 17:06) [5]

До этого я дошел, а вот как "корректно" написать тело таймера.


 
zondor   (2002-09-17 18:42) [6]

i po4emu esli server vikly4en , to klient inet virubaet toze, ( hotja procedura recconeccta napisana gramotno )


 
VID   (2002-09-17 19:32) [7]

Итак есть объекты:
Timer1:TTimer;
Client:TClientSocket;

Var:ManualDisconnect : Boolean;
// = True, если клиент был отключён по желанию пользователя


Procedure DisconBTNClick(...);
begin
ManualDisconnect := True;
Client.Close;
end;

Procedure ClientConnect(...);
begin
ManualDisconnect := False;
end;

Procedure ClientDisconnect(..);
begin
IF not ManualDisconnect then RunReconnect;
end;

Procedure ClientError(...);
begin
Client.Socket.Close(Socket.SocketHandle);
RunReconnect;
end;

Procedure RunReconnect;
begin
Timer1.Enabled := True;
// ;)
end;

Procedure Timer1Timer(...);
begin
IF not Client.Active then
begin
Timer1.Enabled := False;
Client.Open;
end;
end;


 
REA   (2002-09-18 14:16) [8]

Вот уж я в свое время с этим повозился.
Оптимальный вариант так и не сделал.
Еще если надо быстро проверять рассоединение я использовал пинг. Сейчас приведу выдержки кривого кода, который вроде кое-как работает (не стреляйте в пианиста, он играет как умеет):

Procedure TdmGSTCP.csGSTCPError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
Begin
ErrorCode := 0;
If ErrorEvent = eeConnect Then
Begin
Socket.Close;
NeedConnect := True;
End;
End;

Procedure TdmGSTCP.DataModuleDestroy(Sender: TObject);
Begin
Deactivate;
End;

Procedure TdmGSTCP.Reconnect;
Begin
csGSTCP.Active := False; // Disconnect
csGSTCP.Active := True; // Connect
NeedConnect := False;
End;

Procedure TdmGSTCP.Activate(Host: String; Port: Integer);
Begin
Deactivate;
If (Host<>"") Then csGSTCP.Host := Host;
csGSTCP.Port := Port;
NeedConnect := True;
QueryTimer.Enabled:= True;
End;

Procedure TdmGSTCP.QueryTimerTimer(Sender: TObject);
Begin
If (Not Stopped) Then
Try
If NeedConnect Then
Begin
csGSTCP.Active := True;
NeedConnect := False;
End;
Except End;
End;

Procedure TdmGSTCP.csGSTCPDisconnect(Sender: TObject; Socket: TCustomWinSocket);
Begin
If (Not Stopped) Then
NeedConnect := True;
End;

Procedure TdmGSTCP.Deactivate;
Begin
QueryTimer.Enabled := False;
Stopped := True;
csGSTCP.Active := False;
NeedConnect := False;
End;




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

Форум: "Сети";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-45854
Cr@sh
2002-11-05 13:36
2002.11.14
Сложный вопрос. Только для настоящих Мастеров.


1-45819
Mad_Ghost
2002-11-04 15:08
2002.11.14
Delphi & Excel


14-46071
AL2002
2002-10-25 15:40
2002.11.14
Порекомендуйте киевскую фирму,


14-46127
Envad
2002-10-28 00:03
2002.11.14
Как подключиться к базе данных Oracle, используя Midas


3-45689
Шурик Ш
2002-10-28 13:17
2002.11.14
Проблема с кодировкой





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский