udp组播

第一次写博客,不知道格式什么的对不对,我也不是一个擅长表达的人,凑合看吧.

写的可能比较简单,我对udp的理解还是不深,有些东西还不是很明白,望谅解

注意,需要在同一个局域网内.

首先 服务端代码(注释什么的都是根据自己的理解写的,有不对的地方轻喷)

    //端口
    private static int BROADCAST_PORT = 9899;
    //组ip  范围是224.0.0.0---239.255.255.255,其中224.0.0.0为系统自用
    private static String BROADCAST_IP = "224.0.0.1";
    //组
    static InetAddress inetAddress = null;
    //多组数据报套接字(就是一个socket而已,用来连接两端)
    static MulticastSocket multicastSocket = null;

    public static void main(String[] args) {
        try {
            //创建组
            inetAddress = InetAddress.getByName(BROADCAST_IP);
            //创建服务器
            multicastSocket = new MulticastSocket(BROADCAST_PORT);
            //当参数为0时,指定数据报停留在本地主机,为1时,指定数据报发送到本地局域网网,为32时,发送到本站点的网络上。为64时,发送到本地区,128时,发送到本大洲,255为全球。
            multicastSocket.setTimeToLive(1);
            //加入组
            multicastSocket.joinGroup(inetAddress);
        } catch (Exception e) {
            e.printStackTrace();
        }
        new Thread(new Runnable() {
            @Override
            public void run() {
                //创建数据传输对象
                    DatagramPacket dataPacket = null;    
                    //被传输的数据
                    byte[] data ="hello".getBytes();
                    dataPacket = new DatagramPacket(data, data.length, inetAddress,BROADCAST_PORT);    
                    while(true){
                            try{
                                //发送
                               multicastSocket.send(dataPacket);
                               //每3s执行一次发送广播
                               Thread.sleep(3000);
                               System.out.println("发送数据广播:.....");
                            } catch (Exception e){      
                                e.printStackTrace();       
                            }   
                    }   
            }
        }).start();
    }

服务端代码

    //多组数据报套接字
    private static MulticastSocket multicastSocket = null;
    //端口
    private static int BROADCAST_PORT = 9899;
    //udp广播组ip
    private static String BROADCAST_IP = "224.0.0.1";
    //udp广播组对象
    static InetAddress inetAddress = null;
    //随便定义的字符串
    private static String ip;

    public static void main(String[] args) {
        try {
            //通过固定端口,创建服务器对象
            multicastSocket = new MulticastSocket(BROADCAST_PORT);
            //创建组
            inetAddress = InetAddress.getByName(BROADCAST_IP);
            //加入组
            multicastSocket.joinGroup(inetAddress);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    byte buf[] = new byte[1024];
                    //创建一个数据发送对象
                    DatagramPacket dp = null;
                    dp = new DatagramPacket(buf, buf.length, inetAddress,BROADCAST_PORT);
                    while (true) {
                        try {
                            //接收服务器发送过来的数据
                            //这边需要注意一下,服务端每3s发送一次数据,而客户端这边会根据服务端发送数据的频率读取服务端传过来的数据
                            multicastSocket.receive(dp);
                            ip = new String(buf, 0, dp.getLength());
                            System.out.println("检测到服务端IP : " + ip);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }

执行完毕,记得调用close()

好了,就到这里吧.

demo下载地址http://download.csdn.net/detail/qq240138365/9576770

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值