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

本文介绍了一种TCP连接管理方法,通过监听线程来处理客户端连接请求,并采用线程切换的方式确保每次连接请求都能得到及时响应。当新的连接请求到来时,会终止当前处理线程并启动新的线程来处理新连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

整理的代码如下:

 /// <summary>
        /// 初始化连接
        /// </summary>
        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);
        }
        /// <summary>
        /// 监听连接
        /// </summary>

        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();
            }
        }

这样就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值