非常奇怪的自然斷開我有一個System.Net套接字自發真實斷開,尤其是如果我兩次查詢其狀態在Visual Studio 2010中的調試器。的System.Net插座
它的實例是這樣的:
_TCPConn = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
後來我連接和設置的循環看其「連接」屬性。 。 。
_TCPConn.Connect(this.IPAddress, REMOTE_TCP_PORT);
// loop to figure out why/when we're disconnecting ...
int loops;
bool bState = false;
for (loops = 0; loops < 100; loops++)
{
bState = _TCPConn.Connected;
if (!_TCPConn.Connected)
{
break;
}
Thread.Sleep(1000);
}
後,立即連接調用它的Connected屬性是在調試器真正和網絡嗅探器顯示與主機連接成功。
但是,如果我再次在調試器中檢查Connected屬性,它將顯示爲false。
如果我不設置任何斷點在循環它得到所有的方式通過循環(100秒),當它落在了connected屬性爲真我第一次在調試器和看下一次爲假。
如果我讓它環路10或15秒的斷點,這將是真我第一次看在調試器和假我第二次看它,然後它會掉下來的在那個點循環,證明它不僅僅是調試器的人工產物 - 它確實被設置爲false。
當它斷開上有網絡嗅探器,即,沒有相關聯的活動,它沒有被由主機斷開。
這是一個單線程應用程序。我開始考慮這個問題,因爲後來當我嘗試使用我的套接字時,我經常發現它已斷開連接,並試圖找出原因。
所以你已經證明你之前檢測到的問題是真實的。你仍然沒有找到導致斷開的原因。一些環境因素,首先是反惡意軟件和防火牆。 –
我仍然認爲這是我正在做的事情。 System.Net套接字廣泛用於各種各樣的事情,所以如果有防火牆或反惡意軟件自動斷開套接字,我希望看到很多事情都不合時宜。 FWIW我正在編寫的程序是使用Winsock的古代VB6程序的替代品,它可以很好地連接到相同的IP地址和端口。另一個表示它是我的代碼的數據點是我可以在Win7和XP PC上運行不同的防火牆和反惡意軟件。 – user316117
我以爲它是調試器,但請記住,讓我在調試器中首先看到它的原因是它自發地斷開了連接。不過,我將這段代碼放在拇指驅動器上,今晚將它帶回家,在我家中有一個稍微不同的調試器上進行嘗試,以排除這種情況。 – user316117