Android开发:组播(多播)与播音


Android开发:组播(多播)与广播
近期由于需要编写能够使同一局域网中的Android客户端与PC端进行自动匹配通信功能的程序,学习并试验了JAVA组播与广播的内容,记录一些理解如下:

一.组播(多播)
背景知识:组播使用UDP对一定范围内的地址发送相同的一组Packet,即一次可以向多个接受者发出信息,其与单播的主要区别是地址的形式。IP协议分配了一定范围的地址空间给多播(多播只能使用这个范围内的IP),IPv4中组播地址范围为224.0.0.0到239.255.255.255。
JAVA编程:java中通过MulticastSocket实例进行通信,使用时涉及到几个概念①TTL(Time To Live),每个IP报文都包含一个TTL(是一个数字),报文每被一个路由转发一次它的TTL减1,当TTL变为0时,该报文被丢弃②多播组(multicast group),接受者只有加入这个组才能获取发送到该组的报文(这就确定了组播的对象)
JAVA代码:
发送端(Android手机):
//-----------------------------------------------------------------------------------------
MulticastSocket mSocket = new MulticastSocket(30001);//生成套接字并绑定30001端口
InetAddress group=InetAddress.getByName("239.0.0.1");//设定多播IP
byte[] buff = "QQ".getBytes("utf-8");//设定多播报文的数据
mSocket.joinGroup(group);//加入多播组,发送方和接受方处于同一组时,接收方可抓取多播报文信息
mSocket.setTimeToLive(4);//设定TTL
//设定UDP报文(内容,内容长度,多播组,端口)
DatagramPacket packet = new DatagramPacket(buff,buff.length,group,30001);
mSocket.send(packet);//发送报文
mSocket.close();//关闭套接字
//-----------------------------------------------------------------------------------------
接收端(PC):
//-----------------------------------------------------------------------------------------
MulticastSocket s = new  MulticastSocket(30001);//生成套接字并绑定端口
InetAddress group = InetAddress.getByName("239.0.0.1");//设定多播IP
s.joinGroup(group);//接受者加入多播组,需要和发送者在同一组
DatagramPacket packet = new DatagramPacket(buffer , 100);//创建接收报文,以接收通过多播传递过来的报文
s.receive(packet);//接收多播报文,程序停滞等待直到接收到报文

s.close();//关闭套接字
//-----------------------------------------------------------------------------------------
注意事项:
   1.windows系统中的TCP/IP 的媒体感知功能会导致组播报出这样的错误:
java.net.SocketException: IP_ADD_MEMBERSHIP failed (out of hardware filters?)
   windows7环境下解决方法如下:
   使用注册表编辑器 (运行中键入regedit) 来查看下面的注册表项: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters (Tcpip类似文件夹一样的图标能展开里面有Parameters,第一次找了很久)
   添加以下注册表值:
   数值名称:DisableDHCPMediaSense 数据类型:REG_DWORD 即(DWORD(32-位)值)创建后右击修改其值为1,即关闭,重启机器即可
   2.笔者用PC直接连接宽带打开程序报错,切断宽带运行正常,猜测为路由器拒绝转发组播,此问题有待研究(由于笔者使用Windows hostednetwork创建笔记本自己的网络,将手机加入进来进行测试,所以对程序的测试仍可进行),此为实际程序中放弃使用组播的一个原因
   3.不是所有的路由器都支持组播功能,并且一些支持组播的路由器默认为关闭组播的状态,所以目前使用组播写程序时需要考虑实际可用性的问题

二.广播
背景知识:
使用广播,本地网络中所有的主机都会受到一份数据副本。广播使用UDP报文,IPv4使用(255.255.255.255)地址发送广播,本地广播绝不会被路由器转发,即广播信息会被限制在本地网络之内。
JAVA编程:
UDP单播和广播类似,主要是IP不同,都是用DatagramSocket对象进行发送
JAVA代码:
发送端(Android手机)
//-----------------------------------------------------------------------------------------
byte[] buff = "QQ".getBytes("utf-8");//设定报文信息           
DatagramSocket socket=new DatagramSocket();//建立套接字,参数端口号不填写,系统会自动分配一个可用端口
//创建报文,包括报文内容,内容长度,报文地址(这里全1地址即为广播),端口号(接受者需要使用该端口)
DatagramPacket packet=new DatagramPacket(buff,buff.length,InetAddress.getByName("255.255.255.255"), 30000);
socket.send(packet);//发送报文
socket.disconnect();//断开套接字
socket.close();//关闭套接字
//-----------------------------------------------------------------------------------------
接受端(PC):
//-----------------------------------------------------------------------------------------
DatagramSocket socket=new DatagramSocket(30000);//创建套接字
byte[] buffer;//创建接收字符串
buffer=new byte[35];
DatagramPacket packet = new DatagramPacket(buffer , buffer.length);//创建接收报文,以接收通过广播传递过来的
System.out.println("Listening at UDP(30000)....");
socket.receive(packet);//接收报文,程序停滞等待直到接收到报文
socket.disconnect();//断开套接字
socket.close();//关闭套接字
//--

转载自:http://blog.sina.com.cn/s/blog_751eaa830101cigu.html


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
琪胜多媒体定时播放系统是一款集合了音乐播放、视频播放、图片播放、语音播放、字幕播放、广告闲时播放等等为一体功能全面、智能化、自动化的软件,支持目前流行的所有音视频媒体格式;适用于学校、广播电台、电视台、酒店、工厂、车站、机场、商场、超市、百货、饭店、录像厅、展厅、厂矿企业、居民小区、专卖店、便利店、餐饮店、服务厅、公园、部队等等各种应用场所。现在已经得到了广大用户的一致好评。 琪胜多媒体定时播放系统功能: 1、自动定时播放背景音乐、打铃、广播操、眼保健操、国歌、预备音乐铃、上下课铃等。 2、自动定时播视频或图片输出到全彩LED屏或电视,支持多种音频、视频媒体文件格式。 3、定时播放任务支持顺序播放、循环播放与随机播放,支持闲时播放预设媒体广告内容。 4、灵活设置播放时间和播放内容,满足各单位对广播及视频播放的需求。 5、连接在大屏幕电视或大型LED彩屏,实现双屏或多屏拼接显示同一画面。 6、支持滚动字幕显示,支持调整字幕显示的水平位置。 7、新增语音播报功能。( 中文女声 、中文男声 ) 。 8、超市商场店铺智能播音软件,促销广告电脑播音员,功能强大,操作简单,使用灵活。 9、支持循环播音,支持三种播音模式列表循环高效率播音。 10、增加动态音量管理。(可设定多个不同时间段的音量大小) 琪胜多媒体定时播放系统特点: 性价比高,操作简单,容易上手,实用有效,高度智能,时间精确,界面简洁,占用资源少,零维护,设置无限组任务,每个任务设置无限个内容。自动开关机、软件自启动,无人值守,播放临时广播,视频全屏播放,自由设置音量,节假日不播放,具有顺序、循环和随机多个播放模式。语音播报功能是音乐与播音一体化设计,让使用成本为零,广播级双语朗读引擎,杜绝一切人为不稳定因素,强大的任务管理功能,让工作更加高效有序,内置近百种行业标准播音文稿模板,让文稿编写更轻松,预置行业功能应用模板,真正做到所得即所用。无需专职广播员,就解决了传统广播模式下播音不标准、播放不及时、人力成本高等问题,长期有效,为您节约人力、物力、财力、设备、优化人性环境,规范全场管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值