Android为TV端助力:UDP协议(接收组播和单播)
private static String MulticastHost="224.9.9.98";
private static int POST=19999;
private static int unicast_POST=19998; private static String TwoMulticastHost="239.9.9.98"; private boolean isStopThread = true;
/**
* 接收单播
*/
public void requseUDPUnicast(){
UdpReceiver receiver = new UdpReceiver(unicast_POST,isStopThread);
receiver.addOnReceiveListener(new OnReceiveListener() {
@Override
public void OnReceive(UdpReceiver receiver, DatagramPacket packet) {
if(!isStopThread){
receiver.Stop();
return;
}
byte data[] = packet.getData();
String result = new String(data, 0, packet.getLength());
if(!StringUtil.isEmpty(result) && result.contains("HHZT")){
String serverIP = result.replace("HHZT","");
LogUtil.i("serverIP::"+serverIP);
//通过UDP协议获取点播服务器接口
ConfigMgr.getInstance().initEpgUrl(getEPGHost(serverIP));
UserMgr.setServerIP(getEPGHost(serverIP));
//通过点播IP接口获取账号,账号自动在后台创建
getUserNameAndPw();
}
}
});
try {
receiver.Listen();
} catch (IOException e) {
e.printStackTrace();
}
}
package com.hhzt.vod.smartvod.utils; import android.util.Log; import com.hhzt.vod.smartvod.observer.OnReceiveListener; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket; /**
* Created by Administrator on 2018-04-24.
*/ public class UdpReceiver { protected DatagramSocket client=null;
private OnReceiveListener mOnReceiveListener=null;
private Thread thrRecv=null;
protected int port=0;
public boolean isFlag = true;
public UdpReceiver(int port,boolean isFlag){
this.port=port;
this.isFlag=isFlag;
}
protected DatagramSocket Create() throws IOException {
return new DatagramSocket(this.port);
}
public void addOnReceiveListener(OnReceiveListener mOnReceiveListener){
this.mOnReceiveListener=mOnReceiveListener;
}
public void Stop(){
if(this.thrRecv!=null){
this.isFlag = false;
this.thrRecv.interrupt();
}
this.Close();
}
public void Listen() throws IOException {
this.Close();
this.client=this.Create();
if(this.thrRecv!=null) this.thrRecv.interrupt();
this.thrRecv=new Thread(new Runnable() {
@Override
public void run() {
while(!Thread.interrupted() && isFlag){
DatagramPacket packet = null;
try {
packet=UdpReceiver.this.Receive();
} catch (IOException e) {
e.printStackTrace();
}
// UdpReceiver.this.OnReceive(packet);
if(UdpReceiver.this.mOnReceiveListener!=null && null != packet)
UdpReceiver.this.mOnReceiveListener.OnReceive(UdpReceiver.this, packet);
}
}
});
this.thrRecv.start();
}
protected DatagramPacket Receive() throws IOException {
byte[] recvBuf = new byte[4096];
DatagramPacket recvPacket= new DatagramPacket(recvBuf , recvBuf.length);
this.client.receive(recvPacket);
return recvPacket;
}
protected void Close(){
if(this.client!=null) this.client.close();
}
protected void OnReceive(DatagramPacket args){
if(args == null){
return;
}
byte data[] = args.getData();
String result = new String(data, 0, args.getLength());
Log.i("TAG","serverIP11::"+result);
String serverIP = result.replace("HHZT","");
Log.i("TAG","serverIP::"+serverIP); } }
接收组播
public void requseUDPServerIP(){
ThreadPoolManager.getInstance().addTask(new Runnable() {
@Override
public void run() {
MulticastSocket ms = null;
try {
ms = new MulticastSocket(POST);
InetAddress receiveAddress = InetAddress.getByName(MulticastHost);
ms.joinGroup(receiveAddress);
} catch (Exception e) {
e.printStackTrace();
}
byte data[] = new byte[512];
DatagramPacket dp = new DatagramPacket(data, 512);
while (isStopThread) {
try {
ms.receive(dp);
String result = new String(data, 0, dp.getLength());
Log.i("TAG","DatagramPacket11:"+result);
Log.i("TAG","DatagramPacket22:"+dp.getAddress().getHostName());
Log.i("TAG","DatagramPacket33:"+dp.getAddress().getHostAddress());
Log.i("TAG","DatagramPacket44:"+dp.getSocketAddress());
Log.i("TAG","DatagramPacket55:"+dp.getPort());
if(!StringUtil.isEmpty(result) && result.contains("HHZT")){
isStopThread = false;
String serverIP = result.replace("HHZT","");
LogUtil.i("serverIP::"+serverIP);
//通过UDP协议获取点播服务器接口
ConfigMgr.getInstance().initEpgUrl(getEPGHost(serverIP));
UserMgr.setServerIP(getEPGHost(serverIP));
//通过点播IP接口获取账号,账号自动在后台创建
getUserNameAndPw();
ms.disconnect();
ms.close();
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
});}
Android为TV端助力:UDP协议(接收组播和单播)的更多相关文章
- Android为TV端助力 UDP协议
废话不多说.直接上代码! 一. 接收端 1.创建UDP连接 public void init() { try { //开关的作用 isRunning = true; DatagramSocket mU ...
- Android为TV端助力 deep link(深度链接)与自定义协议!
此自定义仅供参考! 首先打开androidManifest.xml 在MainActivity中添加如下内容: <activity android:name=".MainActivit ...
- Android为TV端助力 转载:RecyclerView分页加载
package com.android.ryane.pulltoloaddata_recyclerview; import android.os.Handler;import android.os.L ...
- Android为TV端助力(转载)
作者地址http://www.jianshu.com/u/63915ef020e2 针对Android Tv的自定义RecyclerView 作者 wenju_song 关注 2016.12.09 1 ...
- Android为TV端助力 不需要Socket的跨进程推送消息AIDL!
上篇介绍了跨进程实时通讯http://www.cnblogs.com/xiaoxiaing/p/5818161.html 但是他有个缺点就是服务端无法推送消息给客户端,今天这篇文章主要说的就是服务器推 ...
- Android为TV端助力 史上最简单易懂的跨进程通讯(Messenger)!
不需要AIDL也不需要复杂的ContentProvider,也不需要SharedPreferences或者共享存储文件! 只需要简单易懂的Messenger,它也称为信使,通过它可以在不同进程中传递m ...
- Android为TV端助力 关于Fragment你所需知道的一切!
转载自刘明渊 的博客地址:http://blog.csdn.net/vanpersie_9987 Fragment 是 Android API 中的一个类,它代表Activity中的一部分界面:您可以 ...
- Android为TV端助力 fragment 的用法以及与activity的交互和保存数据的方法,包括屏幕切换(转载)!
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37992017 1.管理Fragment回退栈 类似与Android系统为Acti ...
- Android为TV端助力 事件分发机制
android事件分发机制,给控件设置ontouch监听事件,当ontouch返回true时,他就不会走onTouchEvent方法,要想走onTouchEvent方法只需要返回ontouch返回fa ...
随机推荐
- ShortcutBadgerDemo【安卓应用角标(badge)实现方案】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 本文主要使用的开源库是 leolin310148/ShortcutBadger,但是在其基础上做了一些修改. 什么是应用角标? 1. ...
- B哥竟然也被裁了,聊一聊我的看法
B哥的故事 B哥是在17年底朋友聚会上认识的一个哥们,因为都是程序员,也聊得来.就加了微信.今年是他北漂的第三个年头了. B哥是从小南方长大的一个男孩,高中学习还凑凑活活,勉强过了二本,上了大学没人管 ...
- C#采用vony.Html.AIO插件批量爬MM网站图片
一.创建项目 1.创建一个.netframework的控制台项目命名为Crawler 2.安装nuget包搜索名称Ivony.Html.AIO,使用该类库什么方便类似jqury的选择器可以根据类名或者 ...
- 什么是HTML?
在了解概念之前,先做以下操作,在桌面新建一个txt文件,然后在txt文件中输入:“Hello World”,保存该文件并将其后缀名改为.html,然后双击打开,你就能在浏览器上看到页面显示“Hello ...
- Android利用RecyclerView实现列表倒计时效果
最近面试时,面试官问了一个列表倒计时效果如何实现,然后脑袋突然懵的了O(∩_∩)O,现在记录一下. 运行效果图 实现思路 实现方法主要有两个: 1.为每个开始倒计时的item启动一个定时器,再做更新i ...
- 关于微信JS-SDK 分享接口的两个报错记录
一.前提: 微信测试号,用微信开发者工具测试 二.简单复述文档: 1.引入JS文件 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/j ...
- python3 装饰器初识 NLP第三条
还是先抄一条NLP假设... 三,有效果比有道理更重要 光说做法有道理或者正确而不顾是否有效果,是在自欺欺人. 在三赢(我好,人好,世界好)的原则基础上追求效果,比坚持什么是对的更有意义. 说道理 ...
- Storm入门(九)Storm常见模式之流聚合
流聚合(stream join)是指将具有共同元组(tuple)字段的数据流(两个或者多个)聚合形成一个新的数据流的过程. 从定义上看,流聚合和SQL中表的聚合(table join)很像,但是二者有 ...
- 吴恩达机器学习笔记58-协同过滤算法(Collaborative Filtering Algorithm)
在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数.相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征. 但是如果我们既没有用户的参数, ...
- PHP全栈学习笔记17
phpmyadmin教程 管理页进入phpmyadmin 打开C:\wamp\apps\phpmyadmin3.5.1下的配置文件:config.inc 修改密码 创建与修改数据库.数据表 字段类型 ...