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 ...
随机推荐
- ES 13 - Elasticsearch的元字段 (_index、_type、_source、_routing等)
目录 1 标识元字段 1.1 _index - 文档所属的索引 1.2 _uid - 包含_type和_id的复合字段 1.3 _type - 文档的类型 1.4 _id - 文档的id 2 文档来源 ...
- 游戏AI之模糊逻辑(4)
目录 人类的逻辑 模糊变量 模糊集合 模糊规则 模糊推理 去模糊化 库博方法 结语 if(condition) then dosomething... 这次主要围绕的是游戏AI该如何模仿人类地判断条件 ...
- JS 各种宽高
1.window的各种宽高 outerWidth.innerWidth.outerHeight.innerHeight outerHeight 获取浏览器窗口外部的高度(单位:像素).表示整个浏览 ...
- 委托与lambda关系
什么是委托委托是没有方法体的,声明委托就是一个关键字: delegate ,委托可以试有参无参,有返回值无返回值.和我们的方法是一样的.不同的区别是 委托没有方法体的,委托可放在类下也可以放在类的外面 ...
- C# 插入超链接到PDF文档(3种情况)
超链接可以实现不同元素之间的连接,用户可以通过点击被链接的元素来激活这些链接.具有高效.快捷.准确的特点.本文中,将分享通过C#编程在PDF文档中插入超链接的方法.内容包含以下要点: 插入网页链接 插 ...
- JAVA基础知识(一)—JAVA概述
JAVA概述 1991 年Sun公司的James Gosling(詹姆斯·高斯林)等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名 ...
- freemarker动态生成word并将生成的word转为PDF,openoffice转换word乱码
之前项目有个需求,需要先动态生成word内容,然后再预览生成word的内容(不能修改).整理一下,方便以后使用. 网上参考了好多大神的博客.具体也忘了参考谁的了,如有侵权,请告知修改. 思路一: 将目 ...
- Windows下docker的安装以及遇到的问题
最近因为业务的需要,需要在本地搭建服务环境测试,不想去安装各种软件,于是就想到了用docker来满足我的需要.由于第一次在Windows下安装(以前一直是在linux下使用,但由于内存等硬件的限制 ...
- 【视频】ASP.NET Core MVC 2.* 入门
比较初级的入门教程,网址在B站:https://www.bilibili.com/video/av33728783/ 内容如下: 1. ASP.NET Core 简介和开发工具 2. ASP.NET ...
- Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作
只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 构建了第一个Spring Boot项目. Spring Boot连接MySQL数据库 连接了MySQL数据库. 本文在之前 ...