我正在使用一款商业应用程序,它会抛出一个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字节的数据包。但是这真正意味着什么呢?有两种可能性,我不确定哪一种是:
连接已关闭,但是数据还在被写入套接字,因此引发了上述异常。
0#0
表示由于套接字已关闭而未发送任何内容。连接仍然打开,并且正在发送一个长度为零字节的数据包(即代码存在错误),而
0#0
表示正在尝试发送一个长度为零字节的数据包。