【发布时间】:2010-09-07 11:58:58
【问题描述】:
我有一个设置了虚拟 IP 的 Linux 机器。这是ip addr的部分输出:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether e4:1f:13:60:10:34 brd ff:ff:ff:ff:ff:ff
inet 212.179.158.220/25 brd 212.179.158.255 scope global eth0
inet 212.179.158.221/32 scope global eth0
inet6 fe80::e61f:13ff:fe60:1034/64 scope link
valid_lft forever preferred_lft forever
在这台机器上,我创建了一个绑定到 new InetSocketAddress(port) 的 DatagramSocket,它应该绑定到通配符 IP。
然后应用程序接收发送到 212.179.158.220 或 212.179.158.221 的消息,但是当它响应时,响应始终被视为来自 212.179。 158.220,而我希望响应的远程地址反映收到原始消息的 IP。
我可以为每个 IP 创建一个套接字并监听两者;这给了我想要的行为,但这意味着如果虚拟 IP 在应用程序运行时出现,它将忽略发送到 VIP 的消息。
所以,既然我已经说明了这一点:有没有办法让响应消息的远程主机与原始消息进入的主机相同?我不希望它是自动的,因为套接字应该如何知道将此响应与该消息连接起来?但也许有办法强制它?
提前致谢。
迈克尔
【问题讨论】:
标签: java networking