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