• // 让该类实现Runnable接口,该类的实例可作为线程的target
  • public class MulticastSocketTest implements Runnable
  • {
  • // 使用常量作为本程序的多点广播IP地址
  • private static final String BROADCAST_IP
  • = "230.0.0.1";
  • // 使用常量作为本程序的多点广播目的地端口
  • public static final int BROADCAST_PORT = 30000;
  • // 定义每个数据报的最大大小为4KB
  • private static final int DATA_LEN = 4096;
  • // 定义本程序的MulticastSocket实例
  • private MulticastSocket socket = null;
  • private InetAddress broadcastAddress = null;
  • private Scanner scan = null;
  • // 定义接收网络数据的字节数组
  • byte[] inBuff = new byte[DATA_LEN];
  • // 以指定字节数组创建准备接收数据的DatagramPacket对象
  • private DatagramPacket inPacket
  • = new DatagramPacket(inBuff , inBuff.length);
  • // 定义一个用于发送的DatagramPacket对象
  • private DatagramPacket outPacket = null;
  • public void init()throws IOException
  • {
  • try(
  • // 创建键盘输入流
  • Scanner scan = new Scanner(System.in))
  • {
  • // 创建用于发送、接收数据的MulticastSocket对象
  • // 由于该MulticastSocket对象需要接收数据,所以有指定端口
  • socket = new MulticastSocket(BROADCAST_PORT);
  • broadcastAddress = InetAddress.getByName(BROADCAST_IP);
  • // 将该socket加入指定的多点广播地址
  • socket.joinGroup(broadcastAddress);
  • // 设置本MulticastSocket发送的数据报会被回送到自身
  • socket.setLoopbackMode(false);
  • // 初始化发送用的DatagramSocket,它包含一个长度为0的字节数组
  • outPacket = new DatagramPacket(new byte[0]
  • , 0 , broadcastAddress , BROADCAST_PORT);
  • // 启动以本实例的run()方法作为线程执行体的线程
  • new Thread(this).start();
  • // 不断地读取键盘输入
  • while(scan.hasNextLine())
  • {
  • // 将键盘输入的一行字符串转换成字节数组
  • byte[] buff = scan.nextLine().getBytes();
  • // 设置发送用的DatagramPacket里的字节数据
  • outPacket.setData(buff);
  • // 发送数据报
  • socket.send(outPacket);
  • }
  • }
  • finally
  • {
  • socket.close();
  • }
  • }
  • public void run()
  • {
  • try
  • {
  • while(true)
  • {
  • // 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里
  • socket.receive(inPacket);
  • // 打印输出从socket中读取的内容
  • System.out.println("聊天信息:" + new String(inBuff
  • , 0 , inPacket.getLength()));
  • }
  • }
  • // 捕获异常
  • catch (IOException ex)
  • {
  • ex.printStackTrace();
  • try
  • {
  • if (socket != null)
  • {
  • // 让该Socket离开该多点IP广播地址
  • socket.leaveGroup(broadcastAddress);
  • // 关闭该Socket对象
  • socket.close();
  • }
  • System.exit(1);
  • }
  • catch (IOException e)
  • {
  • e.printStackTrace();
  • }
  • }
  • }
  • public static void main(String[] args)
  • throws IOException
  • {
  • new MulticastSocketTest().init();
  • }
  • }

17.4.3 使用MulticastSocket实现多点广播(2)的更多相关文章

  1. 17.4.3 使用MulticastSocket实现多点广播(4)

    17.4.3  使用MulticastSocket实现多点广播(4) 通过UserInfo类的封装,所有客户端只需要维护该UserInfo类的列表,程序就可以实现广播.发送私聊信息等功能.本程序底层通 ...

  2. 17.4.3 使用MulticastSocket实现多点广播(1)

    http://book.51cto.com/art/201203/322560.htm <疯狂Java讲义(第2版)>本书深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法 ...

  3. 17.4.3 使用MulticastSocket实现多点广播(3)

    上面程序中init()方法里的第一行粗体字代码先创建了一个MulticastSocket对象,由于需要使用该对象接收数据报,所以为该Socket对象设置使用固定端口:第二行粗体字代码将该Socket对 ...

  4. 17.4.3 使用MulticastSocket实现多点广播(5)

    该类主要实现底层的网络通信功能,在该类中提供了一个broadCast()方法,该方法使用Multicast Socket将指定字符串广播到所有客户端:还提供了sendSingle()方法,该方法使用D ...

  5. 使用MulticastSocket实现多点广播

    原文链接:http://hbiao68.iteye.com/blog/1943354 使用MulticastSocket实现多点广播 DatagramSocket只允许数据报发送给指定的目标地址,而M ...

  6. JAVA基础知识之网络编程——-使用MutilcastSocket实现多点广播

    IP多点广播原理 设置一组特殊网络地址作为多点广播地址,每一个多点广播地址都被看作一个组,当客户需要发送和接受信息时,加入到该组即可. IP协议为多点广播提供了一批特殊的IP地址,范围是224.0.0 ...

  7. java之DatagramSocket、DatagramPackage丶MulticastSocket 广播学习

    1.基本概念: a.DatagramPacket与DatagramSocket位于java.net包中 b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送 ...

  8. Android设备一对多录屏直播--(UDP组播连接,Tcp传输)

    原文:https://blog.csdn.net/sunmmer123/article/details/82734245 近期需要学习流媒体知识,做一个Android设备相互投屏Demo,因此找到了这 ...

  9. Android开发之无线遥控器

    最近弄了一个UDP/TCP的小东西,主要需要实现的功能如下(服务器端): 1.基于局域网 2.服务器端网络接口为无线与有线 3.服务器端接收到客户端的数据需要模拟按键进行处理 4.开机自启动 5.使用 ...

随机推荐

  1. 硬盘安装win8系统方法汇总

    从硬盘安装 (推荐)硬盘安装方法一 使用Nt6 hdd installer进行安装,此方法适合XP,vista, Windows 7等系统. 下载Nt6 hdd installer(Win8硬盘安装工 ...

  2. linux--每日一个命令

    编写shell脚本 hello.sh #!/bin/bash # The first program echo -e "\e[1;34m Hello world ! \e[0m" ...

  3. 使用WMware新建linux虚拟机

    使用WMware安装linux虚拟机的时候很多人搞不清楚使用什么适配器. 平时也看到很多误人子弟的观点,这里用事实说话. VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络 ...

  4. 使用POI生成Excel文件,可以自动调整excel列宽

    //autoSizeColumn()方法自动调整excel列宽 importjava.io.FileOutputStream; importorg.apache.poi.hssf.usermodel. ...

  5. cocos2d-js 帧序列动画

    1.resource.js var res = { playerWalk_plist:"res/playerWalk.plist", playerWalk_png:"re ...

  6. Problem H: 小火山的围棋梦想 多校训练2(小火山专场)

    题目链接:http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1908 题意:如果'.'被'*'围起来,就把'.'变为'*'. 分析:如果是'*'直接输出, ...

  7. IDL 实现PCA算法

    在多元统计分析中,主成分分析(Principal components analysis,PCA)是一种分析.简化数据集的技术.主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特 ...

  8. 转:Jmeter 用户思考时间(User think time),定时器,和代理服务器(proxy server)

    在负载测试中需要考虑的的一个重要要素是思考时间(think time), 也就是在两次成功的访问请求之间的暂停时间. 有多种情形挥发导致延迟的发生: 用户需要时间阅读文字内容,或者填表,或者查找正确的 ...

  9. 转:LoadRunner检查点使用小结

    LR中检查点有两种:图片和文字. 常用检查点函数如下: 1)web_find()函数用于从 HTML 页中搜索指定的文本字符串: 2)web_reg_find()函数注册一个请求,以在下一个操作函数( ...

  10. hdu_3549_Flow Problem(最大流)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 题意:求1到n的最大流 题解:模版题,直接上Claris的ISAP,效率是一般dfs的十倍,OR ...