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

我可以在UDP服务器上为NAT后面的客户端使用不同的接收/发送端口吗?,udp,nat,Udp,Nat,我编写UDP服务器,为NAT后面的客户机提供服务。客户端向公共IP和一些预定义端口发送请求。服务器接收消息,创建(从池中获取)线程并 将消息传递给线程(处理程序) 问题:我可以使用新的套接字(不同的端口)发送响应,还是应该使用接收请求的相同端口(套接字) 您需要从服务器上接收请求的相同IP端口发送请求,并将请求发送到从中获取数据的客户端上的相同公共可见IP端口。否则,NAT将无法将数据包中的IP和端口转换回NAT后面的原始客户端 您可以通过使用绑定到服务器IP和端口且未连接到特定客户端的单个服务

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


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

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


您可以通过使用绑定到服务器IP和端口且未连接到特定客户端的单个服务器套接字来实现此要求。然后使用
recvfrom
接收数据和
sendto
发送,使用
recvfrom
返回的地址作为
sendto
中的目标是的,我理解。但在这种情况下,服务器端的所有通信都应该通过单个套接字(端口)执行。是否正确?@bw_dev:理论上,多个套接字可能绑定到同一服务器端IP和端口,但连接到不同的客户端。这些功能也可以使用,但使用单个插座的设计可能更常见。