关于Java组播在Linux中的一个问题

文章详细介绍了在Linux CentOS6.2系统中遇到的UDP接收组播无法正常工作的问题,并提供了解决方案。

 

     今天在再做一个UDP接收组播的程序,由于服务器有多块网卡,需要绑定到一个指定的网卡上面去,通常做法是将MulticastSocket绑定到指定的网卡上面去,就可以收到组播,但是今天当我把它放到Linux(centos 6.2)上去执行的时候,却发现接收不到数据,在网上查找,说Linux可以绑定到组播地址,于是试验确实是可以接收到数据,但是这个到底是什么原因呢?

下面是一篇相关的文档:

http://www.dest-unreach.org/socat/doc/socat-multicast.html

public class Main {

    /**
     * @param args
     * @throws Throwable
     */
    public static void main(String[] args) throws Throwable {

        InetSocketAddress isock = new InetSocketAddress("239.2.2.2", 6666);

        MulticastSocket socket = new MulticastSocket(isock);
        socket.setSoTimeout(5000);

        socket.setNetworkInterface(NetworkInterface
                .getByInetAddress(InetAddress.getByName("172.16.7.65")));
        socket.setInterface(InetAddress.getByName("172.16.7.65"));

        socket.joinGroup(InetAddress.getByName("239.2.2.2"));

        byte[] buf = new byte[1500];
        DatagramPacket p = new DatagramPacket(buf, 1500);
        System.out.println("start rev:......");
        while (true) {
            socket.receive(p);
            System.out.println(p.getLength());
        }
    }

}

转载于:https://www.cnblogs.com/zidom/archive/2013/05/24/3097213.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值