gpt4 book ai didi

c# - 如何中止在内部使用 AcceptTcpClient() 的线程?

转载 作者:太空狗 更新时间:2023-10-30 00:25:39 28 4
gpt4 key购买 nike

AcceptTcpClient() 阻止应用程序在我调用 thrd.Abort() 后退出。

监听时如何退出应用?

最佳答案

您应该能够通过关闭 TcpListener 来中断对 AcceptTcpClient() 的调用(这将导致阻塞 AcceptTcpClient( )。您应该中止该线程,这通常是一个非常糟糕的主意,但在一些非常特殊的情况下除外。

这是一个简单的例子:

class Program
{
static void Main(string[] args)
{
var listener = new TcpListener(IPAddress.Any, 12343);
var thread = new Thread(() => AsyncAccept(listener));
thread.Start();
Console.WriteLine("Press enter to stop...");
Console.ReadLine();
Console.WriteLine("Stopping listener...");
listener.Stop();
thread.Join();
}

private static void AsyncAccept(TcpListener listener)
{
listener.Start();
Console.WriteLine("Started listener");
try
{
while (true)
{
using (var client = listener.AcceptTcpClient())
{
Console.WriteLine("Accepted client: {0}", client.Client.RemoteEndPoint);
}
}
}
catch(Exception e)
{
Console.WriteLine(e);
}
Console.WriteLine("Listener done");
}
}

上面的代码在一个单独的线程上启动了一个监听器,在控制台窗口按Enter会停止监听器,等待监听器线程完成,然后应用程序会正常退出,没有线程中止必填!

关于c# - 如何中止在内部使用 AcceptTcpClient() 的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16214488/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com