C#socket通信時,怎樣判斷socket雙方是否斷開連接


我在Server端new了一個socket,然后bind,開了一個線程來accept前來連接的client,每接到一個client前來連接就新開一個線程和它進行通信。
我把Server端得到的socket放到一個集合里,我想知道集合里的socket是否斷開連接,如果斷開連接我就把它從這個集合里移除。

判斷socket是否斷開連接,網上有N種說法:
1.Socket.Connected
這個屬性只能說明上一次通信時還是正常的。

2.Socket.Pool
這個方法是可以,但是它要從socket里讀或寫部分數據,如果其他線程從這個socket讀寫數據,那么數據將會出錯。我在寫一個遠程通信軟件時候就出現這個問題了。
而且http://technet.microsoft.com/zh-cn/system.net.sockets.socket.poll.aspx上這樣說的:
此方法不能檢測某些類型的連接問題,例如,網絡電纜中斷或遠程主機意外關閉。您必須嘗試發送或接收數據以檢測這些類型的錯誤。

3.使用心跳包
每隔一段時間,socket一方向另一方發送一段特殊的數據,socket的另一方接到這個數據后回發回來。這樣就能判斷socket兩方都沒有掉線了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM