我有一个UDP客户端,它调用connect(),send()和recv()。
服务器有多个IP地址。如果来自服务器的回复不是来自与查询相同的IP,则recv()超时。我在其他地方读过这可能是因为客户端正在调用connect(),因此它只接受来自同一IP的回复。
有没有办法确保服务器始终使用与查询相同的IP回复?我希望服务器能够监听所有接口。
更新:如果客户端没有调用connect()并调用sendto()而不是send(),则recv()会正确接收来自服务器的回复。我仍然宁愿通过从查询来自的相同IP发送回复来在服务器端修复它。服务器上没有路由发生,它是一个具有多个IP的网络接口。
答案 0 :(得分:0)
如果客户端呼叫连接到一个IP地址和端口,则无法接收从不同IP或端口发送的UDP数据报。
答案 1 :(得分:0)
如果您希望服务器监听所有ip和所有端口,则需要在以太网层(原始套接字)进行编程。看看这个link。
在原始套接字中编程时,您可以在代码中检查数据报所针对的IP地址,并从相应的IP进行响应。