我有一个关于使用UDP的服务器和客户端之间的通信的问题 . 我先解释一下我要做的事情 .

  • 客户端使用随机UDP源端口向服务器发送消息到静态服务器UDP端口(11000) .

  • 服务器然后学习客户端发送端口 .

  • 然后,服务器使用另一个随机端口将消息发送回客户端,发送到客户端发送端口 .

问题是服务器只能在路由器上转发客户端随机端口时才返回 . 我不知道是否可能,但服务器是否应该能够使用客户端用来发送的同一端口发送回客户端而不转发端口?我还读到了关于打孔的内容,但如果我理解正确的话,只有当你想要点对点连接时才需要 . 服务器有一个静态IP . 我在C#中尝试这个 .

我希望这个问题很清楚 . 提前致谢!

编辑:有关设置的信息:

客户端是游戏客户端,应该能够从几乎任何位置连接到服务器 . (它目前正在我的家用电脑上运行) . 服务器位于学校,具有静态IP . 服务器上的所有端口都是打开的,服务器也用于ftp,并且运行的服务器使用TCP . 那些事情很好 . TCP有效,因为它创建了一个连接,服务器使用该连接发送回客户端 . UDP的问题是服务器无法发送回客户端,因为UDP是无连接的 .

就像我说的,如果我在客户端打开端口,一切都很好 . 但我的问题是:如何在不打开客户端端口的情况下发送回客户端?大多数游戏不需要您打开端口 . 那么有没有可能在没有端口转发的情况下发回或者我可以使用C#打开端口吗?

编辑2:找到答案

我找到了答案 . 要进行通信,您需要使用相同的UdpClient来发送和接收 . 我用一个发送,一个接收 .

Degor