Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自“错误”IP的数据报_Java_Networking - Fatal编程技术网

Java 来自“错误”IP的数据报

Java 来自“错误”IP的数据报,java,networking,Java,Networking,我有一个安装了虚拟IP的Linux机箱。以下是ip地址的部分输出: 在这台机器上,我创建了一个绑定到新InetSocketAddressport的DatagramSocket,它应该绑定到通配符IP 然后,应用程序接收发送到212.179.158.220或212.179.158.221的消息,但当它响应时,响应始终被视为来自212.179.158.220,而我希望响应的远程地址反映接收原始消息的IP 我可以为每个IP创建一个套接字,并在两个IP上侦听;这给了我想要的行为,但这意味着如果应用程序运

我有一个安装了虚拟IP的Linux机箱。以下是ip地址的部分输出:

在这台机器上,我创建了一个绑定到新InetSocketAddressport的DatagramSocket,它应该绑定到通配符IP

然后,应用程序接收发送到212.179.158.220或212.179.158.221的消息,但当它响应时,响应始终被视为来自212.179.158.220,而我希望响应的远程地址反映接收原始消息的IP

我可以为每个IP创建一个套接字,并在两个IP上侦听;这给了我想要的行为,但这意味着如果应用程序运行时出现虚拟IP,它将忽略发送给VIP的消息

那么,现在我已经说明了这一点:有没有办法让响应消息的远程主机与原始消息的主机相同?我不希望它是自动的,因为套接字如何知道将这个响应与那个消息连接起来?但也许有办法强迫它

提前谢谢

Michael

如果设置IP_PKTINFO套接字选项,然后使用recvmsg接收数据报并提供msg_控制缓冲区,则接收的数据报中将包含一条IP_PKTINFO控制消息,该消息包含在_PKTINFO结构中的结构:

struct in_pktinfo {
    unsigned int   ipi_ifindex;  /* Interface index */
    struct in_addr ipi_spec_dst; /* Local address */
    struct in_addr ipi_addr;     /* Header Destination address */
};
此控制消息告诉您本地目标地址。然后,您可以使用sendmsg为响应提供相同的控制消息,原始目标地址将用作源

struct in_pktinfo {
    unsigned int   ipi_ifindex;  /* Interface index */
    struct in_addr ipi_spec_dst; /* Local address */
    struct in_addr ipi_addr;     /* Header Destination address */
};