一尘不染

远程主机强行关闭了现有连接

c#

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

远程主机强行关闭了现有连接

客户端和服务器之间的套接字连接会发生这种情况。该连接仍然有效,并且正在传输大量数据,但是随后连接断开。

有人看过吗?原因可能是什么?我可以推测出一些原因,但是有没有办法在此代码中添加更多内容来找出可能的原因呢?

欢迎任何意见/想法。

… 最新的 …

我从.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表示正尝试发送零字节的数据包。

你怎么看?我想这可能尚无定论,但也许其他人已经看到这种情况了?


阅读 301

收藏
2020-05-19

共1个答案

一尘不染

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

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

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

您可以启动Wireshark来查看导线上正在发生的事情,以缩小问题的范围。

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

2020-05-19