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 ...
随机推荐
- Python:基于MD5的文件监听程序
前述 写了一个基于MD5算法的文件监听程序,通过不同的文件能够生成不同的哈希函数,来实现实现判断文件夹中的文件的增加.修改.删除和过滤含有特定字符的文件名的文件. 需求说明 需要实现对一个文件夹下的文 ...
- Python:游戏:五子棋之人机对战
本文代码基于 python3.6 和 pygame1.9.4. 五子棋比起我之前写的几款游戏来说,难度提高了不少.如果是人与人对战,那么,电脑只需要判断是否赢了就可以.如果是人机对战,那你还得让电脑知 ...
- 【我们一起写框架】MVVM的WPF框架(五)—完结篇
前言 这篇文章是WPF框架系列的最后一篇,在这里我想阐述一下我对框架设计的理解. 我对框架设计的理解是这样的: 框架设计不应该局限于任何一种设计模式,我们在设计框架时,应该将设计模式揉碎,再重组:这样 ...
- 自学WEB前端到什么程度才能就业
做过多年web前端从业者,回答下这个问题 首先,这个问题主要问:自学web前端技术,如果才能找到一份web前端的工作.按照现在的招聘标准来看,无论你去哪个公司面试,你只需要满足他们公司的需求就可以. ...
- jQuery --- 第四期 (jQuery动效)
学习笔记 1.jQuery动画的淡入淡出 <!doctype html> <html> <head> <meta charset="utf-8&qu ...
- 正确分析结构使用正确的HTML标签。CSS样式写一起。
在内容中 一行内容包括三张图片,每张图片下面有标题和具体介绍,那么可以使用: 分析和解决如下步骤: 1,一行三块,先向左浮动成为一行float:left. 2,把他们的宽度平分三份,33.3%.三份都 ...
- 上帝的归上帝,凯撒的归凯撒—— CODING 权限管理更新
上帝的归上帝,凯撒的归凯撒 <马太福音>22 章 15-22 节,耶稣用这句话,说明了神权与政权之间的正确关系,奠定了神权与政权的基础,也划清了二者的界限.其实这两个问题如今也依旧出现在公 ...
- Android 上传图片到服务器 okhttp一
[目录] (一)上传图片到服务器一 ---------------------------------Android代码 (二)上传图片到服务器二--------------------------- ...
- 第一次JVM分析记录:Out of Memory Error (workgroup.cpp:96), pid=6196, tid=139999645685504
tomcat的catalina.out日志报错如下: Exception in thread "http-bio-8081-Acceptor-0" java.lang.OutOfM ...
- 一条SQL生成数据字典
有个字典表并定期维护,对DBA和开发很重要,终于把他们整合在一起了,看有没问题? 一条SQL生成数据字典,包含所有OPEN用户.表名.字段名.字段序号.字段属性.默认值.是否非空.字段意思.主键标识. ...