TcpListener崩溃我的Windows窗体应用程序

时间:2017-05-20 10:02:03

标签: c# tcplistener

我正在尝试创建一个将侦听TCP连接的winform应用程序,然后在收到连接时执行X.

我遇到的问题是,当它开始收听时,应用程序进入“无响应”

这是我正在使用的代码:

 try
        {
            // set the TcpListener on port 13000
            int port = 13000;
            TcpListener server = new TcpListener(IPAddress.Any, port);

            // Start listening for client requests
            server.Start();

            //Enter the listening loop
            while (true)
            {
               MessageBox.Show(@"Waiting for a connection... ");

                server.AcceptTcpClient();

                MessageBox.Show(@"Connected");
               // ProcessStartInfo proc = new ProcessStartInfo();
               // proc.WindowStyle = ProcessWindowStyle.Hidden;
               // proc.FileName = "cmd";
               // proc.Arguments = "/C shutdown -f -r";
               // Process.Start(proc);

            }
        }
        catch (SocketException)
        {
            MessageBox.Show(@"SocketException");
        }

奇怪的是,它作为控制台应用程序运行得很好。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

正如@ThingyWotsit指出的那样,accept()会阻止线程执行,从而导致应用程序挂起(谷歌阻塞套接字)。但是,你真的不需要关闭它,还有更多的选择!

  1. 穿线。只需在单独的线程中运行此代码块
  2. AcceptTcpClientAsync,建立在async/await之上。这需要修改代码
  3. BeginAcceptTcpClient / EndAcceptTcpClient。这是一个" old"做事的方式,但它应该生活。可以在MSDN
  4. 上找到一个示例