首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >现有连接已被远程主机强制关闭

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

Stack Overflow用户
提问于 2010-04-06 08:54:22
回答 15查看 664.9K关注 0票数 199

我正在使用一个商业应用程序,它抛出一个带有消息的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只是表示没有发送任何内容,因为套接字已经关闭。

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

你觉得呢?我猜这可能是不确定的,但也许其他人见过这种事情?

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2010-04-06 09:07:06

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

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

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

您可以启动Wireshark查看线路上到底发生了什么,以缩小问题的范围。

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

票数 129
EN

Stack Overflow用户

发布于 2018-06-08 00:27:03

使用TLS 1.2解决了这个错误。

您可以通过以下命令强制您的应用程序使用TLS 1.2 (请确保在调用您的服务之前执行它):

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 

另一种解决方案:

要使用TLS1.2,请在本地计算机或服务器中启用强加密,因为在默认情况下,它处于禁用状态,因此只使用TLS1.0。

要启用强加密,请使用管理员权限在PowerShell中执行以下命令:

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord 

您需要重新启动计算机才能使这些更改生效。

票数 115
EN

Stack Overflow用户

发布于 2011-06-15 20:46:41

这不是你代码中的bug。它来自.Net的套接字实现。如果您使用EndReceive的重载实现,如下所示,您将不会得到此异常。

    SocketError errorCode;
    int nBytesRec = socket.EndReceive(ar, out errorCode);
    if (errorCode != SocketError.Success)
    {
        nBytesRec = 0;
    }
票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2582036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档