Android UDP协议通信简单尝试

来源:互联网 发布:淘宝客不计入销量了吗 编辑:程序博客网 时间:2024/05/19 07:07

Android UDP协议通信

ZHR

UDP:UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议。与TCP相比没有是否发送成功的判断机制,相比起来不安全但是速度更快,发送方式更简单,比TCP更合适只发送或者只接收信息的机制。

目标:实现手机与PC通过PC连接手机的热点形成的局域网通信,手机只发送信息,PC只接收数据

实现:主要使用两个类,DatagramSocket与DatagramPacket.

第一步:在AndroidManifest.xml文件中添加入网许可

<uses-permissionandroid:name="android.permission.INTERNET"></uses-permission>

第二步:在Macitvity.java中新建几个变量

private intlocalPort=8102//本地端口
private int romotePort=8102//远程端口
InetAddress address=null//远程IP

第三步:新建UDP通信的套接字与数据包

DatagramSocket socket_UDP = null//UDP协议SocketDatagramPacket DP = null//UDP协议数据包

第四步:新建一个用于存命令的字符串

public static String string = null//指令

注意:由于在使用Android UDP通信中发现将UDP发送程序放于线程之外会失效或闪退,于是自己封装了一个一次性的发送线程,效率不做考虑仅从完成功能的目的考虑,所以在程序中创建一个全局变量字符串,通过每次发送之前修改字符串内容,而改变发送的内容。由于UDP的发送只需要远程端的IP地址与端口于是不需要进行连接,只需要使用合适的发送语句即可。

第五步:封装UDP的发送数据方法

//UDP数据发送public void senCmd(String str){    string = str;    Thread t = new UDPSendThread();    t.start();}//发送数据线程public class UDPSendThread extends Thread{    @Override    public void run() {        sendData_UDP(string);    }}//UDP发送数据基层代码public void sendData_UDP(String str){    try{        socket_UDP = new DatagramSocket(localPort);  //新建UDP类型Socket绑定本地端口        byte[] byteDate = str.getBytes();        DP = new DatagramPacket(byteDate, byteDate.length, address, romotePort);  //将数据装包发送给远程IP与端口        socket_UDP.send(DP);  //发送数据包        socket_UDP.close();    }catch (Exception e){        e.printStackTrace();    }}

注意由于线程是一次性的,所以不用手动去销毁。同时需注意addresss是通过将edittext中的IP转换成InetAddress格式使用。

注意:以上是成功后的程序,单独将UDP部分程序拿出,PC连接手机热点

转载请注明出处
原创粉丝点击