每次在C#中收到新连接时,如何创建新线程?

1 c# sockets multithreading

所以,我对多线程和套接字编程有点新意,特别是在C#中.

无论如何,我正在尝试创建一个程序,将每个新接受的TcpClient创建为新线程.

这就是我所做的:

    public static void Listen()
    {
        try
        {
            listener = new TcpListener(IPAddress.Any, port);
            listener.Start();

            while (true)
            {
                t = new Thread((client = listener.AcceptTcpClient));

            }
        }
        catch { Listen(); }
    }
Run Code Online (Sandbox Code Playgroud)

我也已经将侦听器声明为TcpListener,t作为线程,客户端作为TcpClient.

代码很好,除了我创建线程的地方,它给了我一个错误.

我的最终目标是为每个接受的连接创建一个新线程,然后能够将数据发送到特定连接.

那么,如何在新线程中创建每个连接/客户端?如何从另一个名为Send的方法引用某个线程/连接(通过流将数据发送到特定的线程/连接)?

Fra*_*ank 5

既然你提到你是线程和套接字的新手,我会建议改变方法.每个传入连接创建一个新线程将无法很好地扩展.1000个用户产生1000个线程,您的服务器将花费大部分时间上下文切换.相反,您应该考虑使用异步I/O方法(例如TcpListener.BeginAcceptTcpClient).只有在需要执行某些操作时,才会在.NET线程池线程上调用此方法提供的回调.只需确保同步访问实例变量(例如通过锁定语句),因为如果两个客户端同时连接,则回调可以并行运行(当然,这是目标).祝你好运.