17.4.3 使用MulticastSocket实现多点广播(2)
- // 让该类实现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)的更多相关文章
- 17.4.3 使用MulticastSocket实现多点广播(4)
17.4.3 使用MulticastSocket实现多点广播(4) 通过UserInfo类的封装,所有客户端只需要维护该UserInfo类的列表,程序就可以实现广播.发送私聊信息等功能.本程序底层通 ...
- 17.4.3 使用MulticastSocket实现多点广播(1)
http://book.51cto.com/art/201203/322560.htm <疯狂Java讲义(第2版)>本书深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法 ...
- 17.4.3 使用MulticastSocket实现多点广播(3)
上面程序中init()方法里的第一行粗体字代码先创建了一个MulticastSocket对象,由于需要使用该对象接收数据报,所以为该Socket对象设置使用固定端口:第二行粗体字代码将该Socket对 ...
- 17.4.3 使用MulticastSocket实现多点广播(5)
该类主要实现底层的网络通信功能,在该类中提供了一个broadCast()方法,该方法使用Multicast Socket将指定字符串广播到所有客户端:还提供了sendSingle()方法,该方法使用D ...
- 使用MulticastSocket实现多点广播
原文链接:http://hbiao68.iteye.com/blog/1943354 使用MulticastSocket实现多点广播 DatagramSocket只允许数据报发送给指定的目标地址,而M ...
- JAVA基础知识之网络编程——-使用MutilcastSocket实现多点广播
IP多点广播原理 设置一组特殊网络地址作为多点广播地址,每一个多点广播地址都被看作一个组,当客户需要发送和接受信息时,加入到该组即可. IP协议为多点广播提供了一批特殊的IP地址,范围是224.0.0 ...
- java之DatagramSocket、DatagramPackage丶MulticastSocket 广播学习
1.基本概念: a.DatagramPacket与DatagramSocket位于java.net包中 b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送 ...
- Android设备一对多录屏直播--(UDP组播连接,Tcp传输)
原文:https://blog.csdn.net/sunmmer123/article/details/82734245 近期需要学习流媒体知识,做一个Android设备相互投屏Demo,因此找到了这 ...
- Android开发之无线遥控器
最近弄了一个UDP/TCP的小东西,主要需要实现的功能如下(服务器端): 1.基于局域网 2.服务器端网络接口为无线与有线 3.服务器端接收到客户端的数据需要模拟按键进行处理 4.开机自启动 5.使用 ...
随机推荐
- iOS 最值宏定义
NSIntegerMax.NSIntegerMin.NSUIntegerMax.MAXFLOAT
- Android编译环境(1) - 编译Native C的模块
Android编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile文件,而其他的每个component都使用统一标准的Android.mk. Android.mk文件本身是比 ...
- HttpCookie类
转自:http://www.cnblogs.com/kissdodog/archive/2013/01/08/2851937.html HttpCookie类专门由C#用于读取和写入Cookie的类. ...
- hibernate —— 树状存储
package com.pt.treeStrut; import java.util.Set; import javax.persistence.CascadeType; import javax.p ...
- MyEclipse 2015 运行tomcat 内存溢出的解决方法
内存溢出错误: 2016-3-16 11:19:55 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() ...
- ant 配置expdp and impap
+ 执行步骤: ant -f 1_exp_prod.xml copy file from prod to uat (maunule) ant -f 3_imp_uat.xml 附件: 1.1_exp ...
- Anton and Chess
Anton and Chess time limit per test 4 seconds memory limit per test 256 megabytes input standard inp ...
- Android Skia和2D图形系统 .
Android Skia 和 2D 图形系统 1 Skia 概述 Skia 是 Google 一个底层的图形.图像.动画. SVG .文本等多方面的图形库,是 Android 中图形系统的引擎. Sk ...
- bios自检时间长,显示0075错误
一amibios主板,只有一IDE接口,接一硬盘一光驱,每次启动时,在bios自检界面,在检测完usb设备后,都要等个那么一两分钟,这个时候,可以在屏幕的右下角看到有数字:0075 ,这就是错误代码. ...
- Java传参
1. 如果参数是基本数据类型(int.long等),传值.方法内部改变参数值,外部值不变. 2. 如果参数是对象类型,传地址.方法内部改变对象值,外部对象值改变.但是,如果方法内部调用new重新构 ...