最近在做一个基于TCP协议的项目,设备在对接第三方客户接口时,客户一个功能是基于UDP协议,这样设备还需要基于UDP协议完成数据发送。

故在此写了一个demo,demo分为两部分:

  1. Android基于UDP发送数据;

  2. 编写一个PC端服务,服务接收android设备发送来的UDP数据;

Android端代码:

    private InetAddress mAddress;    private DatagramSocket mSocket = null;    /**     * 发送给整个局域网,局域网网段192.168.0.X     */    private String mBroadCastIp = "192.168.0.255";    /**     * 发送方和接收方需要端口一致     */    private int mSendPort = 8888;    private byte[] mSendBuf;    public void sendUDPMessage(final String msg) {        // 初始化socket        try {            mSocket = new DatagramSocket();        } catch (SocketException e) {            e.printStackTrace();        }        try {            mAddress = InetAddress.getByName(mBroadCastIp);        } catch (UnknownHostException e) {            e.printStackTrace();        }        ThreadPoolManager.getInstance().startTaskThread(new Runnable() {            @Override            public void run() {                try {                    mSendBuf = msg.getBytes("utf-8");                } catch (UnsupportedEncodingException e) {                    e.printStackTrace();                }                DatagramPacket recvPacket1 =                        new DatagramPacket(mSendBuf, mSendBuf.length, mAddress, mSendPort);                try {                    mSocket.send(recvPacket1);                    mSocket.close();                    Log.e(TAG, "sendUDPMessage msg:" + msg);                } catch (IOException e) {                    e.printStackTrace();                }            }        }, "");    }

PC端代码:

    public static void main(String[] args) throws SocketException, IOException {        //创建接收服务器,端口为8888        DatagramSocket socket = new DatagramSocket(8888);        //新建一个包,用来装接收的消息,括号内为此包的容量,即能装下的字节数        DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);        //准备接收消息,并将消息存入包内,若接收不到消息服务器会一直开放,程序不会向下运行        while(true){            socket.receive(packet);            System.out.println(new String(packet.getData()).trim());        }    }

运行效果:

android基于UDP协议发送数据的demo_第1张图片

模拟器Android端每点击一次"发送udp数据"按钮,以udp广播形式发送一个毫秒时间戳字串数据包。PC端服务接收到会打印相应时间戳信息。

android基于UDP协议发送数据的demo_第2张图片

 

注意:

  1. android设备端发送广播的ip设置要与实际网段一致,否则可能会导致PC端服务收不到数据;

  2. android发送udp端口要与PC服务端口一致,否则PC端也不能收到数据。

     

小结:Android基于UDP发送数据使用java标准的api(java.net.*),android端以udp发送数据与PC上发送udp数据无实质区别。

ps:因项目中只要求设备端发送数据,服务端也不对设备发起的数据进行回应,故demo中未实行接收数据的验证。如要同时实现设备端接收udp数据,收发数据应该放在不同线程,以免造成阻塞。

demo代码地址:

https://github.com/TomcatXiong/AndroidUdpDemo

                                                            android基于UDP协议发送数据的demo_第3张图片

更多相关文章

  1. Android Intent 程序之间进行通信 传输数据
  2. 【阿里聚安全·安全周刊】一种秘密窃取数据的新型 Android 木马|
  3. 使用adb工具访问sqlite数据库
  4. android利用websocket协议与服务器通信
  5. Android 设置默认桌面,默认应用,辅助功能,电池优化,设备管理器,
  6. Ubuntu下使用adb和USB连接的方式进行android设备调试

随机推荐

  1. Android(安卓)自定义属性 attr format取
  2. android 编译模块
  3. cross compile toolchain for arm/androi
  4. --------------------【Android】跑马灯
  5. Android编译出现DSL element android.dat
  6. AIR Native Extension的使用(Android)二
  7. Android全局变量使用
  8. Android知识体系总结(全方面覆盖Android
  9. Android(安卓)用axis2 webService产生jav
  10. android EditText inputType详解