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 ...
随机推荐
- jupyter 快捷键
Jupyter Notebook 的快捷键 Jupyter Notebook 有两种键盘输入模式.编辑模式,允许你往单元中键入代码或文本:这时的单元框线是绿色的.命令模式,键盘输入运行程序命令:这时的 ...
- MySQL--7MySQL自定义函数
在函数体的内部可以书写多个sql语句,写多个sql语句的话就称为复合结构
- Node.JS 项目打包 JXCore
哈哈,又回来了 当你开发完成了Node.JS项目,你应该需要打包发行吧 好,JXCore就是干这个的啦! 嗯,可能你会这样来安装 1. curl http://jxcore.com/xil.sh | ...
- jquery简介未完成
jQuery jQuery是一个快速.简洁的javascript框架,是继prototype之后又一个优秀的代码库(或者javascript框架).jQuery设计的宗旨是writeLess,Do M ...
- echo 内容显示颜色
一,字体显示颜色 #字体颜色:30m-37m 黑.红.绿.黄.蓝.紫.青.白str=”要显示的字体“echo -e "\033[30m ${str}\033[0m" ## ...
- UGUI 打图集
using UnityEngine; using System.Collections; using UnityEditor; using System.Collections.Generic; us ...
- Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
严重: Exception sending context initialized event to listener instance of class org.springframework.we ...
- Php 通过curl提交post内容为 Json的请求
<?php $data = array("cNos" => array("1064917432615","1064917432615&qu ...
- binTreePosterorderTraversal二叉树的后序遍历
描述: Given a binary tree, return the postorder traversal of its nodes' values. For example: Given bin ...
- python中的lxml模块
Python中自带了XML的模块,但是性能不太好,相比之下,LXML增加了很多实用的功能. lxml中主要有两部分, 1) etree,主要可以用来解析XML字符串, 内部有两个对象,etree._E ...