如何防止網絡通訊失去連繫 |
答題得分者是:暗黑破壞神
|
takdick
一般會員 ![]() ![]() 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
我寫了一個網絡通訊程序,分別使用了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,其作用是否一樣呢? |
boson
中階會員 ![]() ![]() ![]() 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
依據我的經驗, TCP 難以保持長時間的連線狀態, 即使是在區域網路也是一樣,
偶而會有不明原因的斷線, 甚至斷線後再也無法重新連線, 之前開發程式遇過這樣的問題, 使我再也不敢信任 TCP 協定, 因此往後我寫的網路通訊程式, 我都寧可多花幾倍的工夫用 UDP 協定來寫, 雖然累, 但不會發生無法通訊的情況 之前也在這裏看過其他人有類似的不明原因斷線的情況, 似乎也都找不出原因, 因此, 建議你, 如果程式要長時間通訊, 還是使用 UDP 比較保險(當然你要付出的時間與精力就多得多了) 希望能有人知道如果保持 TCP 穩定連線的方法, 這樣大家寫通訊程式就輕鬆多了 |
Jasonwong
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
|
boson
中階會員 ![]() ![]() ![]() 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
|
takdick
一般會員 ![]() ![]() 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
|
暗黑破壞神
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
網路,本來就無法保證你的資料一定送到。
UDP也沒保證。 TCP只保證在連線狀況下,資料送達一定是正確的。 你的問題就像著名的兩軍對抗。 在兩山頭的將軍都想要對山谷的敵軍發出最後一擊。 可是只有一個山頭的兵力攻打,一定會輸。 所以必須要派通訊兵到另一個山頭說好時間。 可是通訊兵可能在出去時就被幹掉了。 也可能是到另一個山頭達成協議後被幹掉。 可是又有另一個問題。甲山頭派出通訊兵。他固然不知道乙是否知道這件事。 等到他的通訊兵回來時。他可以確知乙將軍已經知道了。 但是。乙山頭的將軍是不是該要煩惱,這個通訊兵,是不是有平安的回到甲山頭跟甲將軍說。我同意進攻呢? 乙又該如何知道呢? 通訊本來就是這麼一回事,網路通訊就是會有這些個鳥事。 如果不會有這種事。那就不用人了。 當年看作業系統的書。上面就說了。 當硬體出問題時,系統要解決。 當系統出問題時,應用程式要解決。 當應用程式出問題時,要誰解決? 當然就是人要解決。一層一層往上報。 否則檔案無法存檔,不跟你回報一直傻傻的幹嗎? 所以才會有著名的”請洽程式設計人員”這種話。 網路出問題。是不是要再繼續進行通訊。就得靠人來處理了。 而不是靠演算法來解決了。 硬體出問題。那就要靠看門狗,做什麼事呢?一個RESET天下無大事。^_^ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |