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