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 ...
随机推荐
- selenium处理弹出窗口
在selenium ui自动化测试过程中,经常会遇到,弹出新窗口,那么会对我们元素定位造成哪些影响呢? 1.元素id或xpath;name都没有问题,就是定位不到. 那如何解决呢?没错webdrive ...
- gitlab4.0备份还原
一,备份 备份默认路径查看: gitlab/config/gitlab.yml 中的backup: 默认tmp/backups ====>这个是gitlab/tmp/backups/ 可不是系 ...
- bat cmd 删除文件或文件夹 删除注册表
@echo off rd "C:\Documents and Settings\Administrator\桌面\新建文件夹" del 是用来删除文件的,删除文件夹的命令是rd 注 ...
- VScode编辑器个性化配置
一.设置方法 “文件” - > “首选项” -> "设置" 二.字体大小和缩进 "editor.tabSize": 2, "editor. ...
- Java基础(basis)-----关键字break、continue、return的区别
1.break break只能用于switch语句和循环语句中,跳出当前循环:但是如果是嵌套循环, 则只能跳出当前的这一层循环,只有逐层break才能跳出所有循环 for (int i ...
- 使用js实现登录随机验证码的效果
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- STL容器之map
[1]map容器 map 是关联容器.容器中的每一个元素都是由一个键值和一个数据值组成的. set 是一个集合它以其元素作为键值(同一个键值只能出现一次),且默认以升序排列. list 是一个顺序容器 ...
- kali 创建快捷方式的方法
Kali应用程序快捷方式分析 kali默认使用Gnome桌面环境,所以给kali添加应用程序快捷方式就是给Gnome添加应用快捷方式. 在/usr/share/applications目录下有很多的. ...
- 获取 web 服务器 port
Tomcat: public static String getServerPort(boolean secure) throws AttributeNotFoundException, Instan ...
- python range函数
这个函数很简单,就不写例子了,看看语法,拿来即用 python range() 函数可创建一个整数列表,一般用在 for 循环中. 函数语法 range(start, stop[, step]) 参数 ...