C# 我是否需要多个流和TCP客户端才能在c中创建聊天应用程序#
我在服务器上使用以下代码进行服务器和客户端之间的通信C# 我是否需要多个流和TCP客户端才能在c中创建聊天应用程序#,c#,sockets,networking,network-programming,tcpclient,C#,Sockets,Networking,Network Programming,Tcpclient,我在服务器上使用以下代码进行服务器和客户端之间的通信 TcpListener server = new TcpListener(IPAddress.Any, 9999); server.Start(); Console.WriteLine("Waiting for client connections"); TcpClient client = server.AcceptTcpClient(); Console.WriteLine("Client request accepted"); Ne
TcpListener server = new TcpListener(IPAddress.Any, 9999);
server.Start();
Console.WriteLine("Waiting for client connections");
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Client request accepted");
NetworkStream stream = client.GetStream();
StreamReader reader = new StreamReader(stream);
StreamWriter writer = new StreamWriter(stream);
现在,这段代码可以很好地连接单个客户机,但是为了允许多个客户机连接到我的服务器,我需要做什么调整呢
我是否需要在每个客户端的新端口上安装一个新的TCP侦听器?我需要多个TCP客户端和流吗?请提供一个简短的指南,说明如何使此代码能够处理>1个客户端,我们将不胜感激。您希望将
服务器.AcceptTcpClient()
放入一个循环中,因为每次新客户端连接时,它都将返回另一个TcpClient
。在MSDN文档中可以看到一个简单的例子,您希望将服务器.AcceptTcpClient()
放入一个循环中,因为每次新客户端连接时,它将返回另一个TcpClient
。您可以在MSDN文档中看到一个简单的示例,您仍然有一个侦听器。。。但每个“接受”都应该产生不同的线程或任务。然后,新线程将创建自己的流。您仍然会有一个侦听器。。。但每个“接受”都应该产生不同的线程或任务。然后,新线程将创建自己的流。在服务器端执行类似操作:
while (true)
{
if (server.Pending()) // if there are any pending connections to server
{
//accept tcpClient and perform further operations.
//create a different thread per client
}
}
在服务器端执行以下操作:
while (true)
{
if (server.Pending()) // if there are any pending connections to server
{
//accept tcpClient and perform further operations.
//create a different thread per client
}
}
是的,您需要处理多个连接才能处理多个客户端。除非您解决了一个非常严重的问题(事实上,您的服务器代码将接受一个客户端,然后断开连接),否则修改现有oode将面临巨大的挑战。简而言之,您只需要一个侦听器,但需要多个流。每次客户端连接时,您都接受连接。您需要一个客户机类来处理所有这些。与其详细讨论并给出答案,我建议您寻找一些示例代码(非常丰富)。有两种方法,您要么需要使用异步套接字,要么需要为您接受的每个TcpClient创建一个新线程,在新线程中启动一个无限循环,然后等待并侦听。使用线程技术无法很好地扩展。是的,您需要处理多个连接才能处理多个客户端。除非您解决了一个非常严重的问题(事实上,您的服务器代码将接受一个客户端,然后断开连接),否则修改现有oode将面临巨大的挑战。简而言之,您只需要一个侦听器,但需要多个流。每次客户端连接时,您都接受连接。您需要一个客户机类来处理所有这些。与其详细讨论并给出答案,我建议您寻找一些示例代码(非常丰富)。有两种方法,您要么需要使用异步套接字,要么需要为您接受的每个TcpClient创建一个新线程,在新线程中启动一个无限循环,然后等待并侦听。使用线程技术并不能很好地扩展。相反,我建议为每个新连接创建一个新线程。MSDN链接就是一个很好的例子,但它一次只能处理一个客户端。IMHO…@paulsm4我同意,你可能不想让它全部在一个线程上运行,但我不想深入到太多毛茸茸的细节。相反,我建议为每个新连接创建一个新线程。MSDN链接就是一个很好的例子,但它一次只能处理一个客户端。IMHO…@paulsm4我同意,你可能不想让它全部在一条线上运行,但我不想涉及太多毛茸茸的细节。