c# - 现有连接被远程主机强制关闭

标签 c# .net networking sockets

我正在使用一个商业应用程序,该应用程序抛出 SocketException 消息,

An existing connection was forcibly closed by the remote host

这发生在客户端和服务器之间的套接字连接上。连接处于事件状态并且运行良好,并且正在传输大量数据,但随后突然断开连接。

有人以前见过这个吗?原因可能是什么?我可以猜测一些原因,但还有什么方法可以在这段代码中添加更多内容来找出原因可能是什么?

欢迎任何评论/想法。

...最新...

我有一些来自 .NET 跟踪的日志记录,

System.Net.Sockets Verbose: 0 : [8188] Socket#30180123::Send() DateTime=2010-04-07T20:49:48.6317500Z

System.Net.Sockets Error: 0 : [8188] Exception in the Socket#30180123::Send - An existing connection was forcibly closed by the remote host DateTime=2010-04-07T20:49:48.6317500Z 

System.Net.Sockets Verbose: 0 : [8188] Exiting Socket#30180123::Send() -> 0#0

根据日志记录的其他部分,我发现它表示 0#0 表示正在发送 0 字节长度的数据包。但这到底意味着什么?

正在发生两种可能性之一,但我不确定是哪一种,

  1. 连接正在关闭,但数据正在写入套接字,从而产生了上述异常。 0#0 只是意味着没有发送任何内容,因为套接字已经关闭。

  2. 连接仍处于打开状态,并且正在发送零字节数据包(即代码有错误),并且 0#0 表示正在尝试发送零字节数据包待发送。

你觉得怎么样?我想这可能还没有定论,但也许其他人也见过这种事情?

最佳答案

这通常意味着远程端关闭了连接(通常通过发送 TCP/IP RST 数据包)。如果您使用第三方应用程序,可能的原因是:

  • 您正在向应用程序发送格式错误的数据(其中可能包括向 HTTP 服务器发送 HTTPS 请求)
  • 客户端和服务器之间的网络链接由于某种原因中断
  • 您在第三方应用程序中触发了一个错误,导致其崩溃
  • 第三方应用程序已耗尽系统资源

很可能第一种情况就是正在发生的情况。

您可以启动Wireshark准确查看线路上发生的情况以缩小问题范围。

如果没有更具体的信息,这里的任何人都不太可能真正为您提供帮助。

关于c# - 现有连接被远程主机强制关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62426349/

相关文章:

c# - 检查通用列表内容的最佳方法

c# - 没有目标的.net委托(delegate)比目标慢

Android:在端口 9150 连接到 Tor SOCKS 代理抛出 `SocketException` ;仅当我安装 Tor Android 应用程序时才有效

c# - .NET CookieContainer 帮助

c# - 如何找出所有可能抛出的异常(特别是 Entity Framework )

c# - 使用 redmon 将打印机输出重定向到 C# 应用程序

linux - 在 NetworkManager 中的共享连接上分配静态 IP 地址

c# - 确定global.asax中的request.islocal

c# - EPPlus 数据透视表 - 折叠整个字段

php - 将 MYSQL 连接到网络服务器