Android之udp传输
注意除了添加Internet权限外,还要添加两行代码
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID; import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log; @SuppressLint("NewApi") public class SocketUdp {
Thread mReceiveThread;
DatagramSocket serverReceive;
DatagramSocket serverSend;
InetAddress local = null;
//构造方法
public SocketUdp(){
try {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build()); if(serverReceive!=null){
serverReceive.close();
serverReceive=null;
}
serverReceive=new DatagramSocket(null);
serverReceive.setReuseAddress(true);
serverReceive.setBroadcast(true);
serverReceive=new DatagramSocket();
mReceiveThread= new Thread(updateThread);
mReceiveThread.start(); local = InetAddress.getByName("192.168.1.51");
//server.setReuseAddress(true);
} catch (Exception e) {
e.printStackTrace();
} }
// 接收数据处理
final Handler updateBarHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");//设置日期格式
String strDate=df.format(new Date());
String receiveString =(msg.getData()).getString("data");
SysLogActivity.AddToLog(strDate+" "+receiveString);
Log.e("接收:"+strDate,receiveString); // 接收数据处理 }
}; // 线程类,该类使用匿名内部类的方式进行声明
Runnable updateThread = new Runnable() { public void run() {
try{
// 得到一个消息对象,Message类是android系统提供的
Message msg = new Message();
Bundle b = new Bundle();
// 定义缓冲区
byte[] buffer = new byte[];
// 定义接收数据包
DatagramPacket packet = new DatagramPacket(buffer,
buffer.length);
while (true) {
msg = updateBarHandler.obtainMessage();
// 接收数据
serverReceive.receive(packet);
// 判断是否收到数据,然后输出字符串
if (packet.getLength() > ) {
String str = new String(buffer, , packet
.getLength());
b.putString("data", str + "\n");
msg.setData(b);
// 将Message对象加入到消息队列当中
updateBarHandler.sendMessage(msg);
}
}
}
catch(Exception ex){
Log.e("socketUdp",ex.toString());
}
}
}; public void SendBuffer(byte[] buffer){
try {
serverSend =new DatagramSocket();
DatagramPacket p = new DatagramPacket(buffer, buffer.length, local,);
serverSend.send(p);
serverSend.close(); } catch (IOException e) {
e.printStackTrace();
}
} public void CloseMe(){
serverReceive.close();
}
}
SocketUdp
Android之udp传输的更多相关文章
- Android中Socket通信之TCP与UDP传输原理
一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...
- Android如何实现TCP和UDP传输
TCP和UDP在网络传输中非常重要,在Android开发中同样重要. 首先我们来看一下什么是TCP和UDP. 什么是TCP? TCP:Transmission Control Protocol 传输控 ...
- 在两个Android设备间通过UDP传输目录内文件
这两天下了一个使用UDP传输目录内文件的程序,发出来给大家一起看看,共同进步.有问题请指教. 由于udp丢包比较厉害,因此使用了自定义的内部协议,进行双方的确认. 程序跑起来后,看网络状况,有时候会一 ...
- Android上UDP组播无法接收数据的问题
最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 pac ...
- AC6102 开发板千兆以太网UDP传输实验2
AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...
- AC6102 开发板千兆以太网UDP传输实验
AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...
- linux网络编程-(socket套接字编程UDP传输)
今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...
- NFC(13)使用Android Beam技术传输文件
注意 Android Beam技术传输文件时nfc只负责连接两个手机,而传输文件实际是用蓝牙模块.且目前接收文件功能只是系统完成,不用自写个接收程序. 传输文件相关的重要api 从Android4.1 ...
- NFC(12)使用Android Beam技术传输文本数据及它是什么
Android Beam技术是什么 Android Beam的基本理念就是两部(只能是1对1,不可像蓝牙那样1对多)NFC设备靠近时(一般是背靠背),通过触摸一部NFC设备的屏幕,将数据推向另外一部N ...
随机推荐
- Node.JS 项目打包 JXCore
哈哈,又回来了 当你开发完成了Node.JS项目,你应该需要打包发行吧 好,JXCore就是干这个的啦! 嗯,可能你会这样来安装 1. curl http://jxcore.com/xil.sh | ...
- iOS UI基础-19.0 UICollectionView
直接上代码,说明请看注释吧 1.继承三个代理 UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateF ...
- cocos2d-x JS 随机数
random4 : function (n, m){ var random = Math.floor(Math.random()*(m-n+1)+n); return random;},
- linux 小笔记
//强杀pid2306的进程 kill -9 2306 //查看80端口占用情况 lsof -i :80 //杀死mysql的所有进程 sudo killall mysqld //关闭占用80端口的所 ...
- 更改file文件上传默认CSS样式
前言: 多数时候我们需要表单上传文件,如图片.但是浏览器默认的input[file]样式很不友好, 需要我们自己手动修改. 如图基于bootstrap布局的表单, 但file文件上传样式不敢恭维. & ...
- jdbc连接oracle的几种格式
1. SID的方式.已经不推荐使用这种方式了. jdbc:oracle:thin:[<user>/<password>]@<host>[:<port>] ...
- Python底层库的函数中from __future__ import absolute_import的作用
在查看TensorFlow的底层优化器时候看到from __future__ import absolute_import 查找相关资料后发现 这个语句的意思是加入绝对引用的特征 直白的意思是,比如: ...
- import caffe报错问题
在搭建好的caffe环境下运行Python报错:ImportError:No module named _caffe 报错原因:由于caffe的Python环境变量未配置好 解决方案: 方法1 imp ...
- 14. Longest Common Prefix(暴力循环)
Write a function to find the longest common prefix string amongst an array of strings. If there is n ...
- 解决lnmp服务器环境wordpress升级或安装插件主题要输入FTP的方法
使用lnmp一键安装包搭建的服务器环境运行wordpress,在后台升级WP程序.安装或更新插件主题时,每时提示输入FTP信息,该问题的原因是nginx的执行身份用户组非文件用户组,前面博客吧使用虚拟 ...