2013-01-04 43 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是破碎的人...也许他们为微软工作。 –