TCP断开重连
在TCP协议中,对于断开的一方其本地用来通讯的端口(系统分配的)仍然会被保留一段时间。所以客户端断开后立即再连就是失败。解决的途径就是换一个本地的通讯端口,由于不能手动指定一个新端口那就只能重新创建TcpClient实例。
在重新创建TcpClient之前要释放掉原TcpClient所占有的资源。
C#代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Threading; namespace OnLineVideo.Util { public class SocketClient { private TcpClient client; private bool isConnection=false; private string hostip;//TCP服务器 private int port;//端口 //检查网络状态线程 Thread checkStateThread; public SocketClient(string hostip, int port) { this.hostip = hostip; this.port = port; client = new TcpClient(); try { client.Connect(hostip, port); } catch { IsConnection = false; } checkStateThread = new Thread(new ThreadStart(checkState)); checkStateThread.IsBackground = true; checkStateThread.Start(); } /// <summary> /// 获取或者设置网络连接状态 /// </summary> public bool IsConnection { get { return isConnection;} set { isConnection = value; } } private void checkState() { while (true) { Thread.Sleep(1000); if (client.Connected== false) { try { client.Close(); client = new TcpClient(); client.Connect(hostip, port); IsConnection = true; } catch { IsConnection = false; } } } } public void SendCommand(string strMessage) { try { byte[] bytesArray = Encoding.ASCII.GetBytes(strMessage+"\n"); NetworkStream networkStream = client.GetStream(); networkStream.Write(bytesArray,0,bytesArray.Length); }catch { IsConnection = false; } } public void Close() { client.Close(); } } }