我在使用 C# 中的 Socket.Connect 方法时遇到了非常奇怪的行为。我正在尝试将 TCP Socket.Connect 连接到有效的 IP 但已关闭端口,并且该方法仍在继续,就好像我已成功连接一样。当我用数据包嗅探发生了什么时,我看到应用程序正在从远程机器接收 RST 数据包。然而,从现有的跟踪可以清楚地看出,connect 方法没有抛出异常。知道是什么原因造成的吗?
运行的代码基本就是这样
IPEndPoint iep =
new IPEndPoint(System.Net.IPAddress.Parse(m_ipAddress), m_port);
Socket tcpSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
tcpSocket.Connect(iep);
更神秘的是……当在独立的控制台应用程序中运行此代码时,结果如预期的那样——connect 方法抛出异常。但是,在 Windows 服务部署中运行它时,我们的连接方法不会引发异常。
根据 Mystere Man 的回答进行编辑 异常将如何被吞噬?我在 .Connect 方法的正上方有一个 Trace.WriteLine,在它的正下方有一个 Trace.WriteLine(为了便于阅读,代码示例中未显示)。我知道两条轨迹都在运行。我也有一个 try catch around the whole thing which also dos Trace.Writeline 并且我没有在任何地方的日志文件中看到它。我还按照您的建议启用了内部套接字跟踪。我没有看到任何异常(exception)。我看到什么似乎是成功的连接。
我正在尝试找出 Windows 服务应用程序和我制作的诊断控制台应用程序之间的区别。不过我的想法已经用完了
结束编辑
谢谢
最佳答案
您确定异常没有在服务中被捕获和吞噬,但没有在控制台应用程序中被捕获和吞没吗?
我的第一步是隔离两种实现之间的差异。您提到了跟踪,但没有说明这是网络跟踪(BCL 的一部分)还是您自己的跟踪。如果您不使用网络跟踪,请启用它。
关于c# - TCP Socket.Connect 正在生成误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/723566/