2

我有一个 TcpListener 对象,它在防火墙后面的 4000 端口上运行。显然,为了让外部客户端连接到 TcpListener,需要在防火墙中打开端口 4000;否则,外部连接请求将无法通过。

我的问题与我接受这样的连接请求时发生的情况有关:

TcpClient client = server.AcceptTcpClient();

TcpClient 使用系统分配的端口号在本地界面上打开。是否必须在防火墙内打开此端口号才能使外部客户端与此 TcpClient 实例通信?如果是这样,是否可以指定要使用的端口号范围以便提前打开它们?或者防火墙是否自动允许在这个系统分配的端口号上进行通信,因为防火墙后面的东西(我的服务器,在这种情况下)建立了,即接受了连接?

4

2 回答 2

2
  • 在服务器机器上,防火墙需要允许从客户端连接的端口到正在侦听的端口的传入连接。TcpListener

  • 在客户端计算机上,防火墙需要允许从客户端连接的端口到正在侦听的端口的传出连接。TcpListener

大多数防火墙(例如,Windows 防火墙)都配置为允许到任何目的地的任何传出连接,因此您只需创建一个规则,允许从任何源在端口 4000 上的传入连接。

如果您想更严格地限制这一点,您可以将TcpClient 绑定到特定端口而不是系统分配的端口,并在服务器和客户端上创建防火墙规则以仅允许来自/到该端口的连接。

于 2009-09-12T17:44:34.537 回答
0

在 windows 防火墙中提供端口范围并不容易,但您可以授予整个程序,当您在 windows 防火墙中添加新条目时,选择程序而不是端口并授予您的程序接收所有连接,然后无论您选择哪个端口,它总是被)允许。

于 2009-09-12T18:35:51.157 回答