簡體   English   中英

套接字keepalive與XP一起使用,但不適用於Windows 7 C#

[英]socket keepalive works with xp but not with windows 7 c#

我有一個奇怪的問題:我有一個TcpClients列表,其中一個斷開連接時需要通知我。 當它們每個都初始化后,我將其套接字設置為keepalive(setsocketoption和iocontrol),並且似乎沒有任何問題(無例外)。

比我有一個單獨的線程,它檢查每個TcpClient的Socket的Connected屬性。 問題在於,即使不再連接ip(例如,我斷開網絡電纜的連接),布爾值仍然是true(已連接)。 我嘗試將代碼更改為(socket.available == true)&& socket.poll(1,socketMode.selectread)保持不變。

一個非常重要的說明:Win Xp可以使用完全相同的代碼(沒有連接時,Connected屬性為false),但不適用於win7,也沒有例外。

我以管理員身份運行程序,並且禁用了防火牆。

先感謝您。

直到“發送”或“接收”操作失敗之前,“ Connected布爾”為true。 這就是TCP / IP的本質。 因此,例如,如果您有一個從計算機A到B的連接插座,然后拔下了計算機B上的網絡電纜,則計算機A不會報告該套接字已斷開連接,直到您下次嘗試發送一些數據為止。

我建議實施某種ping / pong機制,您每隔n個間隔(例如5秒)發送一次,以查看另一端是否仍然存在。

我不知道為什么您的測試表明在XP和Windows 7上它有所不同,我會認為沒有區別。 也許是偶然的機會,在XP上,拔下觸發Connected設置為false的電纜后,您正在發送一些數據?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM