Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否需要多个流和TCP客户端才能在c中创建聊天应用程序#_C#_Sockets_Networking_Network Programming_Tcpclient - Fatal编程技术网

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我同意,你可能不想让它全部在一条线上运行,但我不想涉及太多毛茸茸的细节。