C# c Socket.RemoteEndPoint显示我用于连接的不同端口

C# c Socket.RemoteEndPoint显示我用于连接的不同端口,c#,sockets,C#,Sockets,我开发了一个基本的控制台应用程序,可以作为服务器客户端使用。我的一般工作流程是,服务器启动客户端连接到服务器,一旦客户端发送了某个内容,服务器就会接收并发送给所有客户端。目前,我可以用我的代码实现这一点,但我的问题是,当我发回时,我已经测试了Socket.RemoteEndPoint,看到了像65xxx这样的端口。就像我的第一个客户有65020,第二个是65021等等。我想知道为什么会发生这种情况,因为我使用9001端口连接并在计算机上收听9001端口。我做了一点调查,但找不到解决问题的办法。为

我开发了一个基本的控制台应用程序,可以作为服务器客户端使用。我的一般工作流程是,服务器启动客户端连接到服务器,一旦客户端发送了某个内容,服务器就会接收并发送给所有客户端。目前,我可以用我的代码实现这一点,但我的问题是,当我发回时,我已经测试了Socket.RemoteEndPoint,看到了像65xxx这样的端口。就像我的第一个客户有65020,第二个是65021等等。我想知道为什么会发生这种情况,因为我使用9001端口连接并在计算机上收听9001端口。我做了一点调查,但找不到解决问题的办法。为什么在使用Socket.RemoteEndPoint时会得到这些端口号?这对我来说没关系,因为我在测试时不使用防火墙或任何东西,即使客户端从另一个端口连接,只要它正常工作,我也可以,但如果我有防火墙,我只打开9001端口怎么办?那么我的基于客户端服务器的程序会工作吗?

就这台机器上的服务器/防火墙而言,通常重要的是服务器端口。您通常不会基于客户端的端口应用任何过滤,正如我在评论中所说的,这通常是一个错误。在大多数情况下,客户端代码将不努力指定本地端口或IP地址,并允许操作系统选择适当的值

Socket类的LocalEndPoint和RemoteEndPoint使用local和remote表示从运行此代码的机器的角度来看,不是谁发起了连接,而是谁连接到了


因此,在服务器上,LocalEndPoint将为您提供有关连接的服务器端的信息,RemoteEndPoint将为您提供有关连接的客户端的信息。无论是谁发起了连接。

您在哪里查看RemoteEndPoint?如果您在服务器端检查它,这完全是意料之中的。客户端通常在其端使用临时端口,因为它们的端口无关紧要。我键入socket.RemoteEndPoint并获取此端口号。我想知道我是否必须正常打开所有这些端口?谢谢你的回答。我正在寻找其他的东西来使用,但自从我学会了这一点,我可以坚持这个方法,只需在我的服务器上打开1个端口。