求问MulticastSocket多网卡监听问题!!

jptx 2014-09-08 11:24:17
主机上有多个网卡,如何让MulticastSocket只监听其中一个网卡?
第一块网卡名是“eth3”,IP为192.168.1.101;
第二块,即要监听的网卡的IP为192.168.2.102,网卡名为"net4"。。


MulticastSocket貌似默认只监听第一个网卡啊,不论怎么方法都没法让他监听第二块网卡。


MulticastSocket的setNetworkInterface(NetworkInterface.getByName("net4"))方法不行啊试过了,API文档说的是指定在此套接字上发送的输出多播数据报的网络接口。,是输出。。而这里需要的是监听。。
.setInterface(InetAddress.getByName("192.168.2.102"))方法也试过了,也不行,还是接收不到组播信息。。。
发送端和监听端都加入了组播组228.5.6.7


求大神啊!!救命啊!!!

顺便上代码
客户端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
byte[] arb = "hello".getBytes();
InetAddress inetAddress = InetAddress.getByName("230.0.0.1");
DatagramPacket datagramPacket = new DatagramPacket(arb, arb.length,
inetAddress, 7777);
MulticastSocket multicastSocket = new MulticastSocket();
multicastSocket.send(datagramPacket);
multicastSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


服务端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;

public class Server {

public static void main(String[] args) {
// TODO Auto-generated method stub
try {
MulticastSocket mcastSocket = new MulticastSocket(7777);
InetAddress inetAddress = InetAddress.getByName("230.0.0.1");

// 以下重点来了,把mcastSocket设置为监听名为net4的网卡,可是不行
mcastSocket.setNetworkInterface(NetworkInterface.getByName("net4"));
mcastSocket.setInterface(InetAddress.getByName("192.168.2.102"));
// 两种办法都试了,都不行。192.168.2.102是需要监听的网卡的IP
// 不管用以上哪种方法,都接收不到数据

mcastSocket.joinGroup(inetAddress);

byte[] arb = new byte[100];
DatagramPacket datagramPacket = new DatagramPacket(arb, arb.length);
mcastSocket.receive(datagramPacket);
System.out.println("Server:"
+ new String(arb, 0, datagramPacket.getLength()));
mcastSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}



主机上同时运行client和Server,可以接收到消息,在第一块网卡所在的网络中,其他主机向Server发送消息能接收到,但在第二块网卡的网段中,其他运行Client的主机向Server主机发送数据就收不到,也就是说,上面两行绑定接口的代码无用

求指教啊!!!求大神!!!
...全文
348 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jptx 2014-09-10
  • 打赏
  • 举报
回复
引用 3 楼 ymwcwee 的回复:
是不是防火墙拦截了,如果本机测试可以的话,说明接收消息没问题啊
多谢了!是这里路由器的奇葩问题,路由器重启了,所有问题全消失了,害我改了四天以为代码有问题 OK,结贴了
jptx 2014-09-10
  • 打赏
  • 举报
回复
引用 2 楼 huasuoworld 的回复:
joinGroup(SocketAddress paramSocketAddress, NetworkInterface paramNetworkInterface) 你用这个方法试试。
多谢了!是这里路由器的奇葩问题,路由器重启了,所有问题全消失了,害我改了四天以为代码有问题 OK,结贴了
咔啪咔啪 2014-09-10
  • 打赏
  • 举报
回复
是不是防火墙拦截了,如果本机测试可以的话,说明接收消息没问题啊
huasuoworld 2014-09-10
  • 打赏
  • 举报
回复
joinGroup(SocketAddress paramSocketAddress, NetworkInterface paramNetworkInterface) 你用这个方法试试。
jptx 2014-09-10
  • 打赏
  • 举报
回复
唉,谷歌了两天,依然没有结果,API文档根本没有提

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧