zoukankan      html  css  js  c++  java
  • 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();
            }  
        }
    }

     

  • 相关阅读:
    6章-项目进度管理-day5
    常规正则表达式
    axios删除接口
    elk
    英语笔记
    升级打怪
    用computed实现watch的保持子组件与父组件值同步
    vertical-align不生效的问题
    css居右
    使用maven创建spring工程出现配置文件打不开/不存在的错误
  • 原文地址:https://www.cnblogs.com/WilliamJiang/p/2459599.html
Copyright © 2011-2022 走看看