注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

流星永恒的博客

JSF,Facelets,Rich(Prime)Faces,和java的笔记

 
 
 

日志

 
 

java UDP报文组播(MulticastSocket)  

2012-02-19 20:35:19|  分类: 网络 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

     这里仅是ipv4组播的例子,不是ipv6的。

     分布式部署时,网内其他组件可能需要知道另一个组件具体IP地址然后进一步通信,这样就需要向网内“喊话,老大,你在哪儿”,“老大”组件听到了,然后回应它想要的信息。

     首先:ipv4中的多播地址范围是:224.0.0.0到239.255.255.255。

     看下“老大”的监听例子:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.demo.test;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Daniel
 */
public class MultiCastServer implements Runnable {

    public static void main(String[] args) {
        Runnable r = new MultiCastServer();
        Thread th = new Thread(r);
        th.start();
    }

    @Override
    public void run() {
            try (MulticastSocket socket = new MulticastSocket(6500)) {
                //230.0.0.1
                InetAddress group = InetAddress.getByName("224.0.0.5");
                socket.joinGroup(group);
                DatagramPacket packet;
                byte[] buf = new byte[256];
                packet = new DatagramPacket(buf, buf.length);
                socket.receive(packet);
                String received = new String(packet.getData());
                System.out.println("Received data : " + received);
                socket.leaveGroup(group);
            } catch (IOException ex) {
                Logger.getLogger(MultiCastServer.class.getName()).log(Level.SEVERE, null, ex);
            }
    }
}

“小弟喊话”例子,把自己的IP发给“老大”:

       DatagramSocket socket = new DatagramSocket();
        int DGRAM_LENGTH = 200;
        byte[] b = "192.168.1.100".getBytes(); //我的ip地址
        DatagramPacket dgram;
        dgram = new DatagramPacket(b, b.length,
                InetAddress.getByName("224.0.0.5"), 6500);
        System.err.println("Sending " + b.length + " bytes to "
                + dgram.getAddress() + ':' + dgram.getPort());
            socket.send(dgram);

java UDP报文组播(MulticastSocket) - yyq2007aa - 流星永恒的博客
java UDP报文组播(MulticastSocket) - yyq2007aa - 流星永恒的博客
 
 
  评论这张
 
阅读(2455)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018