这只是一张图片

本文原创,欢迎随便匿名转载,你高兴就行。

上次写了一篇Android Socket通信--TcpClient,最近项目中又用到了udp通信的东西,于是写了这个UdpClientConnecter,希望有要用的哥们直接伸手吧。


UdpClientConnecter

package com.hadisi.socket;import android.os.Bundle;import android.os.Handler;import android.os.Message;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/** * Created by hadisi on 2016/7/22. */public class UdpClientConnector {    private static UdpClientConnector mUdpClientConnector;    private ConnectLinstener mListener;    private Thread mSendThread;    private byte receiveData[] = new byte[1024];    private String mSendHexString;    private boolean isSend = false;    public interface ConnectLinstener {        void onReceiveData(String data);    }    public void setOnConnectLinstener(ConnectLinstener linstener) {        this.mListener = linstener;    }    public static UdpClientConnector getInstance() {        if (mUdpClientConnector == null) {            mUdpClientConnector = new UdpClientConnector();        }        return mUdpClientConnector;    }    Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what) {                case 1000:                    if (mListener != null) {                        mListener.onReceiveData(msg.getData().getString("data"));                    }                    break;            }        }    };    /**     * 创建udp发送连接(服务端ip地址、端口号、超时时间)     *     * @param ip     * @param port     * @param timeOut     */    public void createConnector(final String ip, final int port, final int timeOut) {        if (mSendThread == null) {            mSendThread = new Thread(new Runnable() {                @Override                public void run() {                    while (true) {                        if (!isSend)                            continue;                        DatagramSocket socket = null;                        try {                            socket = new DatagramSocket();                            socket.setSoTimeout(timeOut);                            InetAddress serverAddress = InetAddress.getByName(ip);                            byte data[] = mSendHexString.getBytes("utf-8");                            DatagramPacket sendPacket = new DatagramPacket(data, data.length, serverAddress, port);                            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);                            socket.send(sendPacket);                            socket.receive(receivePacket);                            Message msg = new Message();                            msg.what = 1000;                            Bundle bundle = new Bundle();                            bundle.putString("data", new String(receivePacket.getData()));                            msg.setData(bundle);                            mHandler.sendMessage(msg);                            socket.close();                        } catch (Exception e) {                            e.printStackTrace();                        }                        isSend = false;                    }                }            });            mSendThread.start();        }    }    /**     * 发送数据     *     * @param str     */    public void sendStr(final String str) {        mSendHexString = str;        isSend = true;    }}

怎么用它?

  • 获取UdpClientConnector单利对象
udpClientConnector = UdpClientConnector.getInstance();
  • 创建udp发送连接(服务端ip地址、端口号、超时时间);用udp广播通信ip为"255.255.255.255"
udpClientConnector.createConnector("服务端ip地址",服务器端端口号,超时时间);
  • 实现接收数据接口OnConnectLinstener,onReceiveData(String data)中的data就是服务端返回的数据;
udpClientConnector.setOnConnectLinstener(new UdpClientConnector.ConnectLinstener() {    @Override    public void onReceiveData(String data) {        //do somethings    }});

更多相关文章

  1. 万字长文带你了解最常用的开源 Squid 代理服务器
  2. Android(安卓)json通信(解析)方法
  3. 安卓[android] 通过Uri获取File文件
  4. Android(安卓)进程间通信AIDL学习
  5. React Native兼容iOS Android的TabBar
  6. android actionbar+drawerLayout相关联
  7. Android(安卓)进程间通信-Intent、Messenger、AIDL
  8. android所有需要的Demo地址
  9. Android(安卓)Base64编码解码

随机推荐

  1. C#开发微信门户及应用(三)之文本消息和图
  2. C#开发微信门户及应用(二)之微信消息处理
  3. ASP.NET MVC重写的实例教程
  4. Asp.Net中Session失效是怎么解决的?
  5. MVC实现下拉框联动的实例详解
  6. C#怎么将 HTML转换为图片或 PDF?
  7. C#开发微信门户及应用(一)之微信接口的如
  8. Enum扩展特性实例代码
  9. C#中关于扩展方法的实例分析
  10. 详细介绍一个.net开源权限管理系统