c# - TCP Socket.Connect 正在生成误报

标签 c# .net sockets tcp

我在使用 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/

相关文章:

c# - 将对象转换为 Double 的最快方法?

c#.NET 和 sprintf 语法

c# - 如何使用 C# 将具有属性长度的 xml 空元素标记转换为开始标记和结束标记?

c# - 带@的StringBuilder AppendFormat

c# 在日期范围之间退款

c# - IEnumerable/IEnumerable<T> 接口(interface)只有 MoveNext 的原因是什么?

Linux:如何在给定套接字描述符的情况下获取 TCP 套接字选项?

python - 从套接字中获取服务器名称

c++ - Winsock 客户端 - 通过 TCP/IP4 连接到网络摄像机

c# - 在 Windows 10 通用应用程序中播放音频和视频?