我正在尝试在 C# 中进行套接字编程,现在我需要了解我们是否需要服务器端的套接字数组才能处理多个客户端,或者服务器端的一个套接字足以处理许多客户端;
并且需要配置从服务器到客户端的所有数据是否已经到达以及服务器的可用性,丢弃客户端请求。
我们是否还需要创建多个线程来处理每个客户端?我需要单独处理每个客户。
我正在尝试在 C# 中进行套接字编程,现在我需要了解我们是否需要服务器端的套接字数组才能处理多个客户端,或者服务器端的一个套接字足以处理许多客户端;
并且需要配置从服务器到客户端的所有数据是否已经到达以及服务器的可用性,丢弃客户端请求。
我们是否还需要创建多个线程来处理每个客户端?我需要单独处理每个客户。
每个连接都需要一个新的套接字。 正如 spender 所说,您只使用一个套接字进行侦听,当连接请求进来时,套接字 API 将创建其他套接字。
阅读文档accept
一个监听套接字可以服务多个客户端。
您创建一个侦听器(欢迎套接字),它为每个接受的客户端创建一个专用连接套接字。
我想你需要一些类似的东西。
private void listen(){
TcpListener listener = new TcpListener(5000);
listener.Start();
while (true)
{
// Accept a new client
Socket clientSocket = listener.AcceptSocket();
//Create a thread for every client.
ParameterizedThreadStart pThreadStart = new ParameterizedThreadStart(handleClient);
Thread thread = new Thread(pThreadStart);
thread.Start(clientSocket);
}
}
您可以使用一个套接字来响应多个客户端。当客户端与服务器连接时,您的应用程序会创建一个套接字来参与此连接。
请查看使用 IOCP 编写可扩展的服务器应用程序。这是一个关于如何创建健壮的服务器应用程序的好教程。