gpt4 book ai didi

.net - System.Net 套接字非常奇怪的自发断开连接

转载 作者:行者123 更新时间:2023-12-02 05:18:27 28 4
gpt4 key购买 nike

我有一个自发断开连接的 System.Net 套接字,尤其是当我在 Visual Studio 2010 调试器中查询其状态两次时。

它是这样实例化的:

 _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);
}

在 Connect 调用之后,它的 Connected 属性在调试器中立即为 true,并且网络嗅探器显示与主机的成功连接。

但如果我在调试器中第二次检查 Connected 属性,它会显示为 false

如果我没有在循环中设置任何断点,它会一直通过循环(100 秒),当它退出时,Connected 属性是 true 我第一次查看调试器和 false 下一次。

如果我让它循环 10 或 15 秒并设置断点,第一次查看调试器时它将是 true,第二次查看时将是 false然后它会在那个时候跳出循环,证明它不仅仅是调试器的产物——它真的被设置为 false。

当它断开连接时,网络嗅探器上没有相关事件,即它没有被主机断开连接。

这是一个单线程应用程序。我开始关注这个,因为后来当我尝试使用我的套接字时,我经常发现它断开连接并试图找出原因。

最佳答案

问题似乎是 Visual Studio 2010 Express 调试器中的错误。

正如我在上面的评论中提到的,这种在调试器中的第二次触摸时自发断开连接的奇怪行为发生在两台独立的 PC 上 - 一台 XP 机器和一台 Win 7 PC。要添加更多细节,XP 机器正在连接到一台工业设备,而 Win7 PC 正在连接到本地主机。两台 PC 都运行 Visual C# 2010 Express。

然后我用完整的 Visual Studio 2010 专业版尝试了它,并没有遇到这种行为。

最初导致我开始查看调试器的断开连接问题在调试器不再断开连接后很容易找到。我认为这是我在 30 年的编程生涯中见过的最奇怪的问题之一。

关于.net - System.Net 套接字非常奇怪的自发断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14163230/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com