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