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

我正在处理一个商业应用程序,它会抛出带有消息的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#表示一个零字节的数据包正在试图发送。

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


弑天下
浏览 2948回答 3
3回答

函数式编程

这通常意味着远程端关闭了连接(通常通过发送tcp/ip)。RST(邮包)如果您正在使用第三方应用程序,可能的原因是:您正在向应用程序发送格式错误的数据。由于某种原因,客户机和服务器之间的网络连接正在中断。您在第三方应用程序中触发了一个导致其崩溃的错误。第三方应用程序已经耗尽了系统资源。

30秒到达战场

这不是代码中的错误。它来自.NET的套接字实现。如果您按照下面的方式使用EndRecept的重载实现,您将不会得到此异常。    SocketError errorCode;     int nBytesRec = socket.EndReceive(ar, out errorCode);     if (errorCode != SocketError.Success)     {         nBytesRec = 0;     }
打开App,查看更多内容
随时随地看视频慕课网APP