日期:2014-05-18  浏览次数:21811 次

C\S 程序中,出现socket 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接 问题
现为一个小公司做了一个C\S管理程序, 通过Socket 通信,在开发机器上测试时,一切正常(服务器和客户端都在同一台开发主机上)。但是当将服务器端移植到专门的主机上后, 服务器端经常出现该异常。
我已经将客户端发送消息的时候,将发消息所在的线程睡了30秒。 但还是出现这样的问题。
请问这是不是 那个服务器所在的主机系统主动将我的服务器端与客户端通信的连接关闭?
请问这需要怎么结局?

C# code

System.IO.IOException: 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。 ---> System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。
   在 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   在 System.IO.BinaryReader.ReadBytes(Int32 count)
   在 System.Runtime.Serialization.Formatters.Binary.SerializationHeaderRecord.Read(__BinaryParser input)
   在 System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadSerializationHeaderRecord()
   在 System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
   在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
   在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
   在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage methodCallMessage)



------解决方案--------------------
关注,以前也遇到此问题,未能解决。
------解决方案--------------------
在和设备通信的时候遇到过,结果是设备那端解决的,也就是socket的服务器端
可以看看服务器上是否有开防火墙,关掉试试

另外在客户端对socket发送加try,避免影响后面的程序运行
------解决方案--------------------
server 端关闭,client端依然在读取数据 所以引发异常
catch(IOException ex)
{
if(IOException.InnerException is System.Net.Sockets.SocketException)
Console.WriteLine("网络中断");
else
Console.WriteLine(ex.Message);
}

------解决方案--------------------
服务器遇到异常已经关闭了。
------解决方案--------------------
是不是重复使用端口了?
------解决方案--------------------
探讨
现为一个小公司做了一个C\S管理程序, 通过Socket 通信,在开发机器上测试时,一切正常(服务器和客户端都在同一台开发主机上)。但是当将服务器端移植到专门的主机上后, 服务器端经常出现该异常。
我已经将客户端发送消息的时候,将发消息所在的线程睡了30秒。 但还是出现这样的问题。

------解决方案--------------------
如果不太有把握进行tcp通讯,还是先使用web service或者wcf吧。这两种是比较傻瓜化的,比较可靠。