socket 通信远程主机强迫关闭了一个现有的连接。
摘要: 通信远程主机强迫关闭了一个现有的连接。每隔三秒向局域网内广播一次,当有重服务器上线时,向主服务器注册。“远程主机强迫关闭了一个现有的连接。是不是线程的互斥问题。1)考虑从服务器防火墙的问题2)SendVarData,如果数据量大,会阻塞,考虑新开线程做,并适当的Sleep3)保证client.Connect(ipep);之前可能存在的前一个连接已经关闭。可能造成线程阻塞。
socket 通信远程主机强迫关闭了一个现有的连接。急!!!在线等。
我最近写了一个局域网通信的程序, 用到了多线程和socket来传输文件、发送消息,主服务器的线程中有一个UDP广播, 每隔三秒向局域网内广播一次,当有重服务器上线时远程主机强迫关闭了一个现有的连接,向主服务器注册。 主服务器还可以控制从服务器, 向其发送消息, 但是, 问题出现了, 主服务器发送的消息,有些时候从服务器能收到远程主机强迫关闭了一个现有的连接, 有些时候就抛出异常 “远程主机强迫关闭了一个现有的连接。”这是什么问题,应该怎么解决啊。
UDP代码:
C# code
public void sendUdp() { string str = "I'm running"; UdpClient udp = new UdpClient(2525); try { while (true) { IPAddress ipAdd = IPAddress.Parse("255.255.255.255"); IPEndPoint end = new IPEndPoint(ipAdd, 2020); try { byte[] sendByte = Encoding.Unicode.GetBytes(str); udp.Send(sendByte, sendByte.Length, end); } catch (Exception) { throw; } Thread.Sleep(3000); } } catch (Exception e) { MessageBox.Show(e.Message); throw; } }
TCP代码
C# code
public void sendTcp(string ipAddress,string str) { IPAddress ip = IPAddress.Parse(ipAddress); IPEndPoint ipep = new IPEndPoint(ip, 2025); //创建套接字 Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //连接到发送端 try { client.Connect(ipep); } catch (Exception) { MessageBox.Show("指定的从服务器已意外关闭, 链接不上"); } if (client.Connected) { try { this.SendVarData(client, Encoding.Unicode.GetBytes(str)); } catch (Exception) { MessageBox.Show("传输文件失败!"); throw; } public static int SendVarData(Socket s, byte[] data) { int total = 0; int size = data.Length; int dataleft = size; int sent; byte[] datasize = new byte[4]; datasize = BitConverter.GetBytes(size); sent = s.Send(datasize); while (total < size) { sent = s.Send(data, total, dataleft, SocketFlags.None); total += sent; dataleft -= sent; } return total; }
是不是线程的互斥问题。 因为UDP 每隔三秒发送一次, 当我点击按钮进行消息发送TCP的时候由于线程冲突强制停止的, 我应该怎么解决?
------解决方案--------------------
学习...
------解决方案--------------------
1)考虑从服务器防火墙的问题
2)SendVarData,如果数据量大,会阻塞,考虑新开线程做,并适当的Sleep
3)保证client.Connect(ipep);之前可能存在的前一个连接已经关闭
------解决方案--------------------
三秒发一次。。。
如果数据量大。。可能造成线程阻塞。。。
------解决方案--------------------
学习下
------解决方案--------------------
探讨
在广播之前我能不能让UDP线程等待TCP发送完之后在开始呢》 应该怎么办。
------解决方案--------------------
参考远程主机强迫关闭了一个现有的连接
我来说两句