我有一个关于服务器和客户端之间使用 UDP 通信的问题。我将首先解释我要做什么。
- 客户端使用随机 UDP 源端口向服务器发送消息到静态服务器 UDP 端口 (11000)。
- 服务器然后学习客户端发送端口。
- 然后服务器使用另一个随机端口向客户端发送端口发送一条消息。
问题是,如果客户端随机端口在路由器上转发,服务器只能发回。我不知道这是否可能,但服务器不应该能够使用客户端用来发送的相同端口而不转发端口将其发送回客户端吗?我还阅读了有关打孔的信息,但如果我理解正确,则仅在您想要点对点连接时才需要它。服务器有一个静态IP。我正在 C# 中尝试这个。
我希望这个问题很清楚。提前致谢!
编辑:有关设置的信息:
客户端是一个游戏客户端,应该能够从几乎任何位置连接到服务器。(它目前正在我的家用电脑上运行)。服务器位于学校并具有静态 IP。服务器上的所有端口都是开放的,服务器也用于 ftp,并且有一个运行使用 TCP 的服务器。这些东西工作正常。TCP 之所以有效,是因为它创建了一个连接,并且服务器使用该连接发送回客户端。UDP 的问题是服务器无法发送回客户端,因为 UDP 是无连接的。
就像我说的,如果我在客户端上打开端口,一切都会很好。但我的问题是:如何在不打开客户端端口的情况下发送回客户端?大多数游戏不需要您打开端口。那么有没有可能在没有端口转发的情况下发回或者我可以使用 C# 打开一个端口?
EDIT2:找到答案
我找到了答案。要进行通信,您需要使用相同的 UdpClient 来发送和接收。我使用一个发送和一个接收。
德戈尔