如何防止網絡通訊失去連繫 ( 积分: 100 )

T

takdick

Unregistered / Unconfirmed
GUEST, unregistred user!
我寫了一個網絡通訊程序,分別使用了ClientSocket和SserverSocket控件.
ClientSocket用在遠程機子端,隔時嘗試連接在我的機子的ServerSocket.

procedure TForm1.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode:=0;
socket.Close; //遇異常時即斷開連接並Enable TryConnectTimer重新嘗試連接
end;

procedure TForm1.ClientSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
CheckTimer.Enable:=false; //停止Telnet遠程主機
TryConnectTimer.Enable:=true; //每隔10秒嘗試連接ServerSocket
end;

procedure TForm1.CheckTimer(Sender: TObject);
begin //在連接成功我用了一個Timer,每10分鐘Telnet一下遠程主機的1234端口
try
idtelnet1.Host:='host.com';
idtelnet1.Port:=1234;
idtelnet1.Connect;
except
ClientSocket.Socket.Close; //連接不到Client端則斷開連接並重新嘗試連接
end;
end;

上述代碼的作用都是防止程序在連接成功後遇異常而失去聯繫,但有時候Client端不知何故(不是關機或被用戶Terminate)還是失去了連繫,請問有沒有更可靠的方法解決此問題?
使用線程嗎?但在線程中去執行上面提到的CheckTimer,其作用是否一樣呢?
菜鳥一個,有問的可笑之處還請見諒.謝謝.
 
除非使用稳定的 完成端口,.
 
呵呵..太深奧了,能否詳細解釋一下.
謝謝.
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3697992
 
好象不要用Timer,只需在.ClientSocketError中socket.Close;就行了.ClientSocket自己会尝试重连的.
 
xxagri:你可能沒看清我的代碼,我已在ClientSocketError中加入socket.Close,但這樣不能捕獲所有的異常,所以用了1個Timer,但即使這樣有的時候在互通訊期間還是失去了連繫.
白河愁:我的程序多數時間也就是建立2,3個的連接,不需要用到'完成端口'這樣深的技術吧.我想問建立一個專門用來保持連線的線程是否比使用Timer可靠些?
 
http://www.51zhan.com 最好的网址站
http://www.51zhan.com 最好的网址站
http://www.51zhan.com 最好的网址站
 
help...
please.
 
http://www.51zhan.com 最好的网址站
http://www.51zhan.com 最好的网址站
http://www.51zhan.com 最好的网址站
 
老兄,發心跳包吧,這樣的問題太多人講了,心跳包是最簡單的做法。
 
多人接受答案了。
 
顶部