注意除了添加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. iOS 开发笔记-NSURLConnection的使用

    通过NSURLConnection发送一个HTTP GET请求 //send a GET request to server with some params -(void)httpGetWithPa ...

  2. ios UrlEncode与UrlDecode

    url字符串中具有特殊功能的特殊字符的字符串,或者中文字符,作为参数用GET方式传递时,需要用urlencode处理一下.当然,有时作为Post参数传递,也需要urlencode处理一下. NSStr ...

  3. uft调用rfc接口

    RFC接口函数调用: 以下代码是封装好的,为了提供给UFT工具调用,使用c#写成dll. 类型项目分成两个: 1.baseConfigModel.cs  //sap配置登录信息,属性实体类 using ...

  4. Linux之HugePages快速配置

    关于Linux系统的HugePages与Oracle数据库优化,可以参考熊爷之前的文章,相关概念介绍的非常清晰: Linux大内存页Oracle数据库优化 本文旨在Linux系统上快速配置HugePa ...

  5. java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition的解决方案

    今天在GitHub上面看到一个有意思的项目,下载下来,使用tomcat部署失败,出现异常,网上说JDK版本太高,改低,还是失败. 由于本人有个习惯,更喜欢把项目直接放入tomcat webapps 里 ...

  6. caffe中的caffemodel参数提取方法

    需要的文件为:deploy.prototxt caffemodel net = caffe.Net(deploy.txt,caffe_model,caffe.TEST)具体代码: import caf ...

  7. 《大话设计模式》c++实现 代理模式

    代理模式 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 介绍 意图:为其 ...

  8. Yii2 nginx配置伪静态

    Yii2 配置 Nginx 伪静态 主要检查以下代码: location / { # Redirect everything that isn't a real file to index.php t ...

  9. jQuery效果--show([speed,[easing],[fn]])和hide([speed,[easing],[fn]])

    hide([speed,[easing],[fn]]) 概述 隐藏显示的元素 这个就是 'hide( speed, [callback] )' 的无动画版.如果选择的元素是隐藏的,这个方法将不会改变任 ...

  10. xshell的一些基本操作

    挺全面的一篇文章,没事可以看看. (1)命令ls——列出文件  ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件  ls a* 列出当前目录下以字母a开头的所有文件  l ...