Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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#让服务器看到IP:端口上的客户端之间的差异_C#_Tcpclient_Tcplistener - Fatal编程技术网

C#让服务器看到IP:端口上的客户端之间的差异

C#让服务器看到IP:端口上的客户端之间的差异,c#,tcpclient,tcplistener,C#,Tcpclient,Tcplistener,假设我在IP地址a上有一个服务器,在IP地址B上有两个客户端,使用的是使用TcpClient类的软件。如果两个客户端在同一端口上侦听两个不同的IPv4地址。服务器如何能够使用TcpClient和networkstream向两个客户端回复数据 考虑到目前我只能访问一台计算机,而且一台计算机上的同一端口上不能有两个TcpListener,所以现在对我来说尝试这个有点困难 谢谢 为澄清而编辑。首先,只使用一个TcpListener,并在服务器中执行此操作。客户端应该连接到服务器,而不是相反。这样,在客

假设我在IP地址a上有一个服务器,在IP地址B上有两个客户端,使用的是使用TcpClient类的软件。如果两个客户端在同一端口上侦听两个不同的IPv4地址。服务器如何能够使用TcpClient和networkstream向两个客户端回复数据

考虑到目前我只能访问一台计算机,而且一台计算机上的同一端口上不能有两个TcpListener,所以现在对我来说尝试这个有点困难

谢谢


为澄清而编辑。

首先,只使用一个TcpListener,并在服务器中执行此操作。客户端应该连接到服务器,而不是相反。这样,在客户端的计算机上,您将被分配一个随机可用的端口与服务器通信


其次,您可以使用虚拟机在一台机器上进行测试,或者在同一台计算机上运行服务器和客户机,这样仍然可以工作。祝你好运

嗯,你把这个颠倒过来了。服务器是唯一应该运行
TcpListener
-客户端只需使用
TcpClient
向服务器打开一个流,服务器可以随时向该流写入数据。至于TCP是如何工作的,只要读一篇文章或一本书就可以了——这并不是很难找到的信息,在上面发布也没有什么意义。但要点是:每个TCP/IP连接都有远程IP地址和TCP端口,以及本地IP地址和TCP端口。客户端的地址和端口用于区分连接(请参阅TCP临时端口)。我明白你的意思,但在我的例子中,客户端和服务器都运行侦听器,因为它们彼此通信。但我想我本可以解释得更好一些。另外,考虑到谷歌用户的数量,我认为这是一个好主意,这也是问题所在。不要让客户端运行自己的侦听器。只需使用您拥有的TCP流,它是双向的。但是如果我说有一个聊天应用程序(我有),并且某人写了一条消息,然后服务器必须发送给所有连接的客户端,我必须让客户端有自己的侦听器。我很难理解您的问题。“服务器如何回复客户端”-通过
socket.Write()
。“服务器如何看待差异”-它将套接字绑定到不同的客户端。“AcceptTcpClient是一种阻塞方法,它返回一个TcpClient,您可以使用它发送和接收数据”。您可以澄清您的问题吗?@Thomja服务器没有“连接回”,当客户端以tcp连接时,它是双向连接。客户机和服务器都可以通过一个连接(由客户机建立)相互发送数据。很好,TcpListener将处理它。您只需多次调用
tcostener.AcceptTcpClient()
即可接受多个客户端。每次有客户端连接时,该方法都将返回TcpClient。对于多客户端处理,我有一个关于Github的小示例项目。在这里查看:@Thomja-每个TCP连接都有四条信息-
源IP:source Port:destination IP:destination Port
。只要整个事物是独一无二的(它将是独一无二的),就不会有混乱。这就是为什么你不选择你的源端口作为客户端-你让系统获取一个未分配的端口。@Thomja你应该认真阅读TCP是如何工作的,这是一个相当复杂的主题。返回地址是正在发送的低级数据的一部分(Damien提到的源ip/端口等)。防火墙在这方面并不重要——连接是从客户端启动的,这是您唯一关心防火墙的时候。打开的通道是双向的。@Thomja-这也是保持连接打开的关键。默认情况下,防火墙将配置为允许客户端使用临时端口进行传出连接。您的“服务器连接回客户机”是一个防火墙问题,因为它将是一个传入连接,而这些往往是我们担心的事情(更多)。