非常奇怪的自然断开我有一个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