我正在尝试创建一个将侦听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");
}
奇怪的是,它作为控制台应用程序运行得很好。
任何想法我做错了什么?
答案 0 :(得分:1)
正如@ThingyWotsit指出的那样,accept()
会阻止线程执行,从而导致应用程序挂起(谷歌阻塞套接字)。但是,你真的不需要关闭它,还有更多的选择!
async/await
之上。这需要修改代码BeginAcceptTcpClient
/ EndAcceptTcpClient
。这是一个" old"做事的方式,但它应该生活。可以在MSDN