您的位置:首页 > 移动开发 > Android开发

Android UDP协议通信简单尝试

2017-09-10 21:32 363 查看
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协议Socket
DatagramPacket 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
4000
, romotePort);  //将数据装包发送给远程IP与端口
        socket_UDP.send(DP);  //发送数据包
        socket_UDP.close();
    }catch (Exception e){
        e.printStackTrace();
    }

}

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

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

转载请注明出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息