为了账号安全,请及时绑定邮箱和手机立即绑定

现有连接被远程主机强制关闭。

现有连接被远程主机强制关闭。

弑天下 2019-07-13 14:56:51
我正在处理一个商业应用程序,它会抛出带有消息的SocketException,现有连接被远程主机强制关闭。这发生在客户端和服务器之间的套接字连接上。连接是活动的和良好的,大量的数据正在被传输,但随后它就从不知道的地方断开了连接。有人见过这个吗?原因是什么?我可以猜到几个原因,但有没有办法在这段代码中添加更多的内容来找出原因呢?欢迎任何意见/想法。..最新的.。我有一些.NET跟踪的日志记录,System.Net.Sockets Verbose: 0 : [8188] Socket#30180123::Send() DateTime=2010-04-07T20:49:48.6317500ZSystem.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#仅仅意味着没有发送任何东西,因为套接字已经关闭。2)连接仍然处于打开状态,一个零字节的数据包正在发送(即代码有一个错误),0#表示一个零字节的数据包正在试图发送。你觉得呢?我想这可能是不确定的,但也许其他人见过这样的事情?
查看完整描述

3 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

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

  • 您正在向应用程序发送格式错误的数据。
  • 由于某种原因,客户机和服务器之间的网络连接正在中断。
  • 您在第三方应用程序中触发了一个导致其崩溃的错误。
  • 第三方应用程序已经耗尽了系统资源。


查看完整回答
反对 回复 2019-07-13
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

这不是代码中的错误。它来自.NET的套接字实现。如果您按照下面的方式使用EndRecept的重载实现,您将不会得到此异常。

    SocketError errorCode;
    int nBytesRec = socket.EndReceive(ar, out errorCode);
    if (errorCode != SocketError.Success)
    {
        nBytesRec = 0;
    }


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 2832 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信