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 ...
随机推荐
- 【极简版】SpringBoot+SpringData JPA 管理系统
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在上一篇中已经讲解了如何从零搭建一个SpringBo ...
- RFI to RCE challenge
http://www.zixem.altervista.org/RCE/level1.php 构造payload: https://zixem.altervista.org/RCE/level1.ph ...
- 使用拷贝的方式(adb push) 绕过Android系统和adb install直接安装APK
某些情况下定制的Android系统为了限制用户安装应用,例如电视盒子,车载中控等,通过修改代码屏蔽了正常安装应用的方式 本文探讨如何在 adb shell 具有读写data分区目录的权限前提下,通过a ...
- java多线程 生产者和消费者 lock
package com.atguigu.thread.lock; import java.util.concurrent.locks.Condition; import java.util.concu ...
- Java Socket聊天室编程(二)之利用socket实现单聊聊天室
这篇文章主要介绍了Java Socket聊天室编程(二)之利用socket实现单聊聊天室的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在上篇文章Java Socket聊天室编程(一)之 ...
- mysql 表结构转excel表格
最近需要写文档,由于开发模式是先开发后写文档(不想吐槽...),数据库表结构什么的都搞好了,然后写文档的时候需要贴表结构,什么字段,类型,相关说明需要一一对应起来,数据库表10多张,字段又多,手动复制 ...
- 来一波C#发送邮件
1.所用工具和资源:VS2012 在.NET Frameword类库中提供SmtpClient类(System.NET.Mail) 2.运行截图 3.具体代码实现如下: using System; ...
- Hadoop系列007-HDFS客户端操作
title: Hadoop系列007-HDFS客户端操作 date: 2018-12-6 15:52:55 updated: 2018-12-6 15:52:55 categories: Hadoop ...
- springboot~集成测试里的redis
测试不应该访问外部资源 对于单元测试,集成测试里,如果被测试的方法中使用到了redis,你需要去模拟一个单机环境的redis server,因为只有这样,你的测试才是客观的,即不会因为网络和其它因素影 ...
- Gulp(自动化构建工具 )
前言 Gulp,简而言之,就是前端自动化开发工具,利用它,我们可以提高开发效率. 比如: 1. 压缩js 2. 压缩css 3. 压缩less 4. 压缩图片 等等… 我们完全可以利用Gulp ...