TCP断开连接情况判断(发送端没有任何信息告知现在状态的情况下)

上一章可以接收数据显示了,使用中发现,第2次连接时,出现毫无反应的现象,
故障排查,想着是不是要断开连接,没有关闭的缘故,
后来觉的不发送数据了并不是说就要断开连接,
并且数据发送段没有任何信息告诉我啥时候是连着没数据(暂停),啥时候是不连接了(关闭),
所以,想通过以接收的数据是不是0判断就不行了,

最后的思路是:运行后我开启一个后台线程时刻监听是否有连接请求,收到请求就创建一个线程,去接收处理数据,
再收到一个请求就把上一个线程杀死,执行下一个线程。(如果不是在一个死循环里,线程长久不使用了,会被清理的,不过我需要写在死循环里,所以要手动杀死)

整理的代码如下:

 /// 
        /// 初始化连接
        /// 
        public void initBack()
        {
            //定义侦听端口,侦听任何IP  
            ipEnd = new IPEndPoint(IPAddress.Any, 5300);
            //定义套接字类型,在主线程中定义  
            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //连接  
            serverSocket.Bind(ipEnd);
            //开始侦听,最大10个连接  
            serverSocket.Listen(10);
            //开启一个线程连接,必须的,否则主线程卡死  
            Thread thread = new Thread(Listen);
            thread.Start(serverSocket);
        }
        /// 
        /// 监听连接
        /// 

        Thread lastThread = null;
        void Listen( )
        {
            while (true)
            {
                clientSocket = serverSocket.Accept();
                countSocket++;
                if (clientSocket != null)
                {
                    Thread th = new Thread(A);
                    th.IsBackground = true;
                    if (lastThread != null)
                    {
                        lastThread.Abort();
                    }
                    th.Start();
                    lastThread = th;
                }
            }
        }
        void A()
        {
            while (true)
            {
                ReceiveBack();
            }
        }

这样就可以了

你可能感兴趣的:(TCP断开连接情况判断(发送端没有任何信息告知现在状态的情况下))