Android UDP简单实现
2016-01-03 15:53
387 查看
说明
测试程序分为两个部分:Android客户端、Java服务端。Android客户端:向局域网UDP广播字符串“Hello, World!”,端口号是11000。然后打印所有收到的UDP广播。
Java服务端:监听11000的UDP广播,收到UDP广播后,发送一个JSON串。
Android客户端
[code]public class MainActivity extends Activity { // UDP广播IP和PORT public static final String SERVERIP = "255.255.255.255"; public static final int SERVERPORT = 11000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new Thread(new Client()).start(); } DatagramSocket socket = null; public class Client implements Runnable { public void run() { // 向局域网UDP广播信息:Hello, World! try { InetAddress serverAddress = InetAddress.getByName(SERVERIP); System.out.println("Client: Start connecting\n"); socket = new DatagramSocket(SERVERPORT); byte[] buf = "Hello, World!".getBytes(); DatagramPacket packet = new DatagramPacket(buf, buf.length, serverAddress, SERVERPORT); System.out.println("Client: Sending ‘" + new String(buf) + "’\n"); socket.send(packet); System.out.println("Client: Message sent\n"); System.out.println("Client: Succeed!\n"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 接收UDP广播,有的手机不支持 while (true) { byte[] recbuf = new byte[255]; DatagramPacket recpacket = new DatagramPacket(recbuf, recbuf.length); try { socket.receive(recpacket); } catch (IOException e) { e.printStackTrace(); } System.out.println("Server: Message received: ‘" + new String(recpacket.getData()) + "’\n"); System.out.println("Server: IP " + recpacket.getAddress() + "’\n"); } } } }
AndroidManifest中添加Internet权限
[code]<uses-permission android:name="android.permission.INTERNET" />
Java服务端
[code]class UDPServer { public static void main(String[] args) throws IOException { DatagramSocket server = new DatagramSocket(11000); while (true) { byte[] recvBuf = new byte[100]; DatagramPacket recvPacket = new DatagramPacket(recvBuf, recvBuf.length); server.receive(recvPacket); String recvStr = new String(recvPacket.getData(), 0, recvPacket.getLength()); System.out.println(); System.out.println("收到的内容:" + recvStr); System.out.println("收到的ip:" + recvPacket.getAddress()); // 发送UDP消息,JSON格式数据 // {"name":"123","ID":"Robot007","BATTERY":"2.7f"} int port = recvPacket.getPort(); InetAddress addr = recvPacket.getAddress(); JSONObject json = new JSONObject(); json.put("name", "Computer7"); json.put("ID", "Robot007"); json.put("BATTERY", "2.7f"); byte[] sendBuf = json.toString().getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port); server.send(sendPacket); } } }
相关文章推荐
- android131 360 03 输入密码
- 导入android sample时遇到的问题以及解决方案
- Android 性能优化学习笔记
- 如何在Android Studio项目中导入开源库?
- 自定义Android日志输出工具类
- android关于多线程操作sqlite知识点
- Android Dagger2学习
- mokoid android open source HAL hacking in a picture
- Android中获取资源文件的几种方法
- Android实现界面组件的抖动效果
- MPAndroidChart 教程:ChartData类,ChartData子类, DataSet类,DataSet子类(十二)
- Android动画之Animator
- android 图片操作之BitmapMesh
- Gradle在Android Studio 的应用
- android 图片操作之Shader
- android 图片操作之Xfermode
- Android点击Button水波纹效果
- android图片操作之 Matrix
- Android常用数据库ORM框架ORMlite和GreenDao比较
- [置顶] Android 中触摸事件的分发和拦截