我有一个Python服务器监听UDP数据包并回复发送者。在客户端中,我使用相同的端口连接回服务器。客户端通过GSM网络工作,它们的IP地址不是公共的,因此网络进行了一些端口映射,以便服务器可以联系它们,我认为是这样。
有时候端口映射可能会出现问题,因为打开的套接字仍然能够在客户端->服务器之间通信,但反向通信不能正常工作。
情况恶化到两个客户端具有相同的( IP、地址)对。在服务器上,当我使用sock.recvfrom接收来自它们的消息时,根据它们的内容,我清楚地知道这些消息来自于两个不同的客户端,但地址是相同的。
我在服务器上放置了nc -l,并在每个客户端上运行nc,很明显两张GSM卡共享相同的外部IP,所以最后一个打开端口的客户端会得到其映射,而旧的客户端则会根据假定它仍然拥有映射(实际上已经没有映射)而无法工作。
我没有编写原始代码,因此无法解释为什么客户端要使用特定的给定端口连接服务器,但我认为即使使用随机端口,该问题也将持续存在,因为网络在一段时间后(我想它应该是在某些事件之后,例如GSM信号丢失)重新映射端口。
有没有人有任何想法可以避免这种情况?
有时候端口映射可能会出现问题,因为打开的套接字仍然能够在客户端->服务器之间通信,但反向通信不能正常工作。
情况恶化到两个客户端具有相同的( IP、地址)对。在服务器上,当我使用sock.recvfrom接收来自它们的消息时,根据它们的内容,我清楚地知道这些消息来自于两个不同的客户端,但地址是相同的。
我在服务器上放置了nc -l,并在每个客户端上运行nc,很明显两张GSM卡共享相同的外部IP,所以最后一个打开端口的客户端会得到其映射,而旧的客户端则会根据假定它仍然拥有映射(实际上已经没有映射)而无法工作。
我没有编写原始代码,因此无法解释为什么客户端要使用特定的给定端口连接服务器,但我认为即使使用随机端口,该问题也将持续存在,因为网络在一段时间后(我想它应该是在某些事件之后,例如GSM信号丢失)重新映射端口。
有没有人有任何想法可以避免这种情况?