TCPListener.AcceptTcpClient阻塞进程退出方法

 ```

private void btnStop_Click(object sender, RoutedEventArgs e)
{
bIsExecute = false; //此处拆除循环条件

        //方法1:直接停止监听套接字,引发异常从而强行使Accept退出阻塞。
        //---------------------------------------------
        //if (listener != null)
        //{
        //    listener.Stop();
        //}
        //---------------------------------------------

        
        //方法2:主动发送一条数据,使Accept自然地退出阻塞。
        //---------------------------------------------
        TcpClient tcpClient = new TcpClient();
        tcpClient.Connect("127.0.0.1",9000);

        NetworkStream ns = tcpClient.GetStream();
        if (ns.CanWrite)
        {
            Byte[] sendBytes = Encoding.ASCII.GetBytes("Exit");
            ns.Write(sendBytes, 0, sendBytes.Length);
            lbMsg.Items.Add("发送退出命令成功!");
        }
        else
        {
            lbMsg.Items.Add("发送退出命令失败!");
            return;
        }
        ns.Close();
        tcpClient.Close();
        //---------------------------------------------

        btnStart.IsEnabled = true;
        btnStop.IsEnabled = false;
    }

————————————————
版权声明:本文为CSDN博主「西刷君」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yijun494610095/java/article/details/55257787
posted @ 2020-06-01 10:24  猝不及防  阅读(1000)  评论(0编辑  收藏  举报