注意除了添加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传输的更多相关文章

  1. Android中Socket通信之TCP与UDP传输原理

    一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...

  2. Android如何实现TCP和UDP传输

    TCP和UDP在网络传输中非常重要,在Android开发中同样重要. 首先我们来看一下什么是TCP和UDP. 什么是TCP? TCP:Transmission Control Protocol 传输控 ...

  3. 在两个Android设备间通过UDP传输目录内文件

    这两天下了一个使用UDP传输目录内文件的程序,发出来给大家一起看看,共同进步.有问题请指教. 由于udp丢包比较厉害,因此使用了自定义的内部协议,进行双方的确认. 程序跑起来后,看网络状况,有时候会一 ...

  4. Android上UDP组播无法接收数据的问题

    最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 pac ...

  5. AC6102 开发板千兆以太网UDP传输实验2

    AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...

  6. AC6102 开发板千兆以太网UDP传输实验

    AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...

  7. linux网络编程-(socket套接字编程UDP传输)

    今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...

  8. NFC(13)使用Android Beam技术传输文件

    注意 Android Beam技术传输文件时nfc只负责连接两个手机,而传输文件实际是用蓝牙模块.且目前接收文件功能只是系统完成,不用自写个接收程序. 传输文件相关的重要api 从Android4.1 ...

  9. NFC(12)使用Android Beam技术传输文本数据及它是什么

    Android Beam技术是什么 Android Beam的基本理念就是两部(只能是1对1,不可像蓝牙那样1对多)NFC设备靠近时(一般是背靠背),通过触摸一部NFC设备的屏幕,将数据推向另外一部N ...

随机推荐

  1. chrome debug 服务端性能

    设置 http header 在 chrome 查看服务端性能 \Yii::$app->getResponse()->headers->set('Server-Timing', 'c ...

  2. JAVA编程思想学习笔记4-chap10-12-斗之气4段

    1.内部类:Iterator 2..this生成对外部类的引用 3..new:通过外部类对象创建内部类对象 package com.chengjie; public class TestInnerCl ...

  3. 关于原始input的一些事情

    1.关于input type为number时 maxlength失效 <input class="myfrom-input" type="text" id ...

  4. obv15 实例6:如果K线柱过多,ZIG将发生变动,导致明显的OBV15指标被隐藏!

    obv

  5. 使用promisify解决fs的回调地狱问题

  6. web前端名词

    HTML: HyperText Markup Language      超文本标记语言 XHTML:Extensible HyperText Markup Language   可扩展性超文本标记语 ...

  7. CSS选择符-----伪类选择符

    Element:hover E:hover { sRules }  设置元素在其鼠标悬停时的样式 <!DOCTYPE html> <html> <head> < ...

  8. Hive 中的复合数据结构简介以及一些函数的用法说明

    参见下面这篇博客: Hive 中的复合数据结构简介以及一些函数的用法说明

  9. Class__One HomeWork 实验报告

    石家庄铁道大学信息科学与技术学院       实验报告 2018年----2019年  第一学期               题目:   四则运算和验证码 课程名称:  JAVA语言程序设计 班    ...

  10. 2017-2018-2 20165215 实验四《Android开发基础》实验报告

    2017-2018-2 20165215 实验四<Android开发基础>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:张家佳 学号:20165215 指导教 ...