2013-01-04 42 views
3

非常奇怪的自然斷開我有一個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。

當它斷開上有網絡嗅探器,即,沒有相關聯的活動,它沒有被由主機斷開。

這是一個單線程應用程序。我開始考慮這個問題,因爲後來當我嘗試使用我的套接字時,我經常發現它已斷開連接,並試圖找出原因。

+0

所以你已經證明你之前檢測到的問題是真實的。你仍然沒有找到導致斷開的原因。一些環境因素,首先是反惡意軟件和防火牆。 –

+1

我仍然認爲這是我正在做的事情。 System.Net套接字廣泛用於各種各樣的事情,所以如果有防火牆或反惡意軟件自動斷開套接字,我希望看到很多事情都不合時宜。 FWIW我正在編寫的程序是使用Winsock的古代VB6程序的替代品,它可以很好地連接到相同的IP地址和端口。另一個表示它是我的代碼的數據點是我可以在Win7和XP PC上運行不同的防火牆和反惡意軟件。 – user316117

+0

我以爲它是調試器,但請記住,讓我在調試器中首先看到它的原因是它自發地斷開了連接。不過,我將這段代碼放在拇指驅動器上,今晚將它帶回家,在我家中有一個稍微不同的調試器上進行嘗試,以排除這種情況。 – user316117

回答

-1

的問題似乎是在Visual Studio 2010速成調試器的錯誤。

正如我在評論中提到以上,獲得第二觸摸在調試器自發斷開的這種怪異的行爲發生的兩個獨立的電腦上 - XP的機器和Win 7的PC。爲了增加更多細節,XP機器連接到一臺工業設備,Win7 PC連接到本地主機。兩臺PC都運行Visual C#2010 Express。

所以,我再與Visual Studio 2010中的完全專業版試了一下,並沒有遇到這樣的行爲。

造成我開始尋找在首位調試原來斷開的問題是那麼容易發現,一旦調試器已不再斷開我。我認爲這是我在30年編程中見過的最奇怪的問題之一。

+0

如果* that *是您遇到的最爲棘手的問題之一* 30年的編程... * –

+0

這是多麼粗魯和毫無意義的評論。我看到了類似的東西 - 但在VS2010 Pro中 - 我作爲程序員的48年經驗非常奇怪。四個downvoters是破碎的人...也許他們爲微軟工作。 –