Android(安卓)Socket通信--UdpClient
16lz
2021-01-25
这只是一张图片
本文原创,欢迎随便匿名转载,你高兴就行。
上次写了一篇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 }});
更多相关文章
- 万字长文带你了解最常用的开源 Squid 代理服务器
- Android(安卓)json通信(解析)方法
- 安卓[android] 通过Uri获取File文件
- Android(安卓)进程间通信AIDL学习
- React Native兼容iOS Android的TabBar
- android actionbar+drawerLayout相关联
- Android(安卓)进程间通信-Intent、Messenger、AIDL
- android所有需要的Demo地址
- Android(安卓)Base64编码解码