当前位置: 首页 > 知识库问答 >
问题:

是否可以在 UDP 服务器上为位于 NAT 后面的客户端使用不同的接收/发送端口?

阎善
2023-03-14

我编写UDP服务器,为NAT后面的客户端提供服务。 客户端将请求发送到公共IP和一些预定义的端口。服务器接收消息,创建(从池获取)线程并将消息传递给线程(处理程序)。

问题:我可以使用新的套接字(不同的端口)来发送响应,还是应该使用接收请求的相同端口(套接字)?

共有1个答案

周翰池
2023-03-14

您需要从服务器上接收请求的同一IP端口发送请求,并将请求发送到您获取数据的客户端上的同一公共可见IP端口。否则,NAT将无法将数据包中的IP和端口转换回NAT后面的原始客户端。

您可以通过使用单个服务器套接字来实现这一要求,该套接字绑定到服务器IP和端口,而不连接到特定的客户端。然后,使用recvfrom接收数据,使用sendtosendto发送,将recvfromsendto中的目标。

 类似资料:
  • 我尝试使用Spring Integration实现UDP服务器,就像这里描述的那样,但是当客户端在NAT之后运行时,它们将永远不会收到来自服务器的响应。这是因为服务器应该从与UDP适配器端口相同的端口发送响应数据报(通过这里解释的NAT检查UDP)。 如何使用Spring Integration实现与NAT后客户端的正确UDP通信?

  • 已移动:https://superuser.com/questions/782549/udp-client-sending-icmp-port-unreachable-when-receiveing-messages-from-the-ser 我有一个使用luasocket的udp客户端,基本上是这样做的(有几个抽象层,但这是正在发生的事情): 虽然在服务器的调试输出(到远程主机的ssh)中看到一

  • 我正在尝试使用UDP在服务器(在公共IP上)和客户端(通过NAT)之间进行双向通信。我的逻辑是,如果服务器向IP和它接收数据包的端口发送一些数据,客户端仍然应该得到它,因为NAT最终会有将数据包发送到客户端的映射。 客户端有 2 个进程,一个用于发送数据包,另一个进程用于接收数据。服务器继续等待数据,如果它获得数据,它会将数据发送回从接收数据的端口和 IP。 客户代码如下: client_recv

  • 嗨,我的问题很简单: 我尝试通过TCP连接建立UDP连接(因为多个客户端通过多个通道连接到服务器,我想通过主TCP连接识别相同的客户端) 我通过在客户机上创建TCP和UDP套接字来实现这一点,并通过TCP将操作系统随机分配的本地UDP端口传输到服务器。(在Windows上,我通过getsocketname()获得sendto()之后的端口)。在服务器上,我使用这个端口将UDP数据包发送到这个客户机

  • 我想编写一个tcp服务器和客户端应用程序,在客户端使用相同端口号的情况下,它们之间有几个不同的连接。 据我所知,服务器有一个侦听器端口,当客户端调用它时,我会在服务器端为这个新连接获得一个新的套接字,当我调用它时 正当所以在服务器端,我可以识别我与这个新套接字的连接,并通过它发送数据。 现在,我的理解与客户端的问题。我打电话的时候会拿到插座 所以我只有一个插座。在 我可以指定远程地址等等。所以当我

  • 问题内容: 我想在两个或更多不同的node.js应用程序服务器之间启用基于套接字的p2p通信。我正在使用socket.io处理给定服务器与其服务的Web应用程序之间的所有此类通信- 但我正在寻找的是一种服务器与服务器之间进行通信的方法。 我最初以为它像这样简单: 但是,事实证明,服务器端socket.io实现没有提供“连接”方法,仅提供了侦听方法。 为什么是这样?为什么不能将节点应用程序服务器视为