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

242

我正在使用一款商业应用程序,它会抛出一个SocketException异常,并显示以下消息:

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

这种情况发生在客户端和服务器之间的socket连接中。尽管连接是正常并且大量数据正在传输,但突然之间连接就断开了。

有人以前遇到过这种情况吗?可能的原因是什么?我可以猜测几个原因,但是是否有任何方法可以添加更多代码以找出原因呢?

欢迎任何评论/想法。

...最新消息...

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

你认为呢?可能会无法确定,但也许其他人见过类似的情况?

只是一个更新。由于我们的网络设置,似乎Wireshark在这种情况下行不通。但我希望尝试一下这个链接:http://blogs.msdn.com/dgorti/archive/2005/09/18/471003.aspx,它使用.NET进行跟踪,应该会生成一些日志文件。我会随时向您报告... - peter
1
Comcast 也以发送伪造 ID 的“零”数据包来干扰 P2P 流量而闻名。 - user1335322
20个回答

1

对我来说,问题是我尝试发送电子邮件的应用程序服务器被添加到我们公司SMTP服务器的允许列表中。 我只需要为该应用程序服务器提交SMTP访问请求

这是基础设施团队添加的方法(我不知道如何自己执行这些步骤,但这是他们所说的):

1.  Log into active L.B.
2.  Select: Local Traffic > iRules > Data Group List
3.  Select the appropriate Data Group
4.  Enter the app server's IP address
5.  Select: Add
6.  Select: Update
7.  Sync config changes

0

我正在尝试使用GO客户端连接到MQTT代理,代理地址是address + porttcp://address:port

示例:❌

mqtt://test.mosquitto.org

这意味着您希望建立一个未加密的连接。

要请求MQTT over TLS,请使用以下之一:ssltlsmqttsmqtt+ssltcps

示例:✅

mqtts://test.mosquitto.org

0
我们正在使用SpringBoot服务。我们的restTemplate代码如下:
@Bean
    public RestTemplate restTemplate(final RestTemplateBuilder builder) {

        return builder.requestFactory(() -> {
            final ConnectionPool okHttpConnectionPool =
                    new ConnectionPool(50, 30, TimeUnit.SECONDS);
            final OkHttpClient okHttpClient =
                    new OkHttpClient.Builder().connectionPool(okHttpConnectionPool)
                            // .connectTimeout(30, TimeUnit.SECONDS)
                            .retryOnConnectionFailure(false).build();

            return new OkHttp3ClientHttpRequestFactory(okHttpClient);
        }).build();
    }

在为restTemplate设置ReadTimeout之后,我们所有的调用都失败了。我们增加了时间,问题得到了解决。


0
我在返回包含DateTime属性的复杂类型时遇到了这个异常。我的服务器使用的是.Net 4.8.1,而我的客户端使用的是.Net 6.0。
目前,为了使其正常工作,我已将数据类型更改为字符串。我不知道如何更改Microsoft的默认序列化方式。
另一种解决方案是不返回复杂类型,而是返回一个序列化的JSON字符串,您可以选择格式。

0

这种错误发生的另一个可能性是,如果您尝试使用无效凭据连接到第三方服务器太多次,并且像Fail2ban这样的系统正在阻止您的IP地址。


0
在我的情况下,启用IIS服务器,然后重新启动并再次检查。

enter image description here


0
有时候这可能是IIS的问题。如果您创建了一个新的自签名证书,那么请打开IIS管理器,确保在IIS的每个绑定中更新了新的SSL证书名称。即(右键单击->编辑绑定->https[编辑->添加新的SSL])

0

我有时也会遇到这个错误。增加服务器内存可以解决我的问题。请确保您的服务器有足够的内存。


0
虽然我不建议这样做,但解决这个问题的另一种快速简便的方法是,去掉你对该邮件服务的依赖注入实现,并在每次调用时实例化它。

-1

在我的应用程序中,每当我在10秒内没有发送或接收数据时,就会出现此错误,该错误与CIP协议有关。

这是由于使用了前向打开方法造成的。您可以通过使用其他方法或安装低于10秒的更新速率来避免此问题,以维护您的前向打开连接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接