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接口自动化(八)--发送post请求的接口(详解)
简介 上篇介绍完发送get请求的接口,大家必然联想到发送post请求的接口也不会太难,被聪明的你又猜到了.答案是对的,虽然发送post请求的参考例子很简单,但是实际遇到的情况却是很复杂的,因为所有系统 ...
- 《HelloGitHub》第 33 期
公告 欢迎 点击分享 自荐或发现的开源项目,也可安装 分享插件 更便捷地推荐有趣的开源项目. 小伙伴们,新的一年就要来了,今年的 Bug 改完了吗?先看看<HelloGitHub>最新一期 ...
- Java集合详解7:HashSet,TreeSet与LinkedHashSet
今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合 ...
- Thymeleaf【快速入门】
前言:突然发现自己给自己埋了一个大坑,毕设好难..每一个小点拎出来都能当一个小题目(手动摆手..),没办法自己选的含着泪也要把坑填完..先一点一点把需要补充的知识学完吧.. Thymeleaf介绍 稍 ...
- 目标检测之YOLO V2 V3
YOLO V2 YOLO V2是在YOLO的基础上,融合了其他一些网络结构的特性(比如:Faster R-CNN的Anchor,GooLeNet的\(1\times1\)卷积核等),进行的升级.其目的 ...
- 对.NET Core未来发展趋势的浅层判断
经常听到园里.NET开发人员在抱怨生态不如JAVA,想要转JAVA,所谓打不过你,我就加入你!杜兰特的思维方式固然是获取总冠军的一种方式,但是我们要关起门来问自己有没有杜兰特的实力. 用开发生态来类比 ...
- ajax提交数据
ajax提交数据 注意:获取值可以从方法参数传过来 也可以通过jquery获取对应标签的值:同时参数要与请求的动作方法的参数一致,否则值无法映射 发送 ajax (get 方式简写)请求 注 ...
- IDEA编写css样式报错
粗心大意!浪费了30分钟时间,必须记录一下! 报错图片 琢磨了半天,没想出是哪里错了,很无奈!!!!!!!!! 度娘:ctrl+shift+alt+H,设置成NONE就可以了 试了一下,果然好使,不再 ...
- SQL Server 数据库基于备份文件的【一键还原】
1. 备份与还原的基础说明 我们知道在DBA的日常工作中,SQL Server 数据库的恢复请求偶有发生,可能是用作数据的追踪,可也可能能是数据库的灾难恢复. 数据库常用的备份命令如下: ----完整 ...
- Windows Server 2016-命令行方式管理Windows服务
Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序. 这些服务可在计算机启动时自动启动,可以暂停和重启,并且不显 ...