Java UDP通信简单实现
2015-08-12 08:30
477 查看
1、Java实现方式
1)服务器端
2)客户端
1)服务器端
/** * UDP服务器端 * */ public class UdpServer { // 定义一些常量 private final intMAX_LENGTH = 1024; // 最大接收字节长度 private final intPORT_NUM = 5066; // 端口号 // 用以存放接收数据的字节数组 private byte[] receMsgs = new byte[MAX_LENGTH]; // 数据报套接字 private DatagramSocket datagramSocket; // 用以接收数据报 private DatagramPacket datagramPacket; public UdpServer(){ try { /******* 接收数据流程**/ // 创建一个数据报套接字,并将其绑定到指定端口上 datagramSocket = new DatagramSocket(PORT_NUM); // DatagramPacket(byte buf[], int length),建立一个字节数组来接收UDP包 datagramPacket = new DatagramPacket(receMsgs, receMsgs.length); // receive()来等待接收UDP数据报 datagramSocket.receive(datagramPacket); /****** 解析数据报****/ String receStr = new String(datagramPacket.getData(), 0 , datagramPacket.getLength()); System.out.println("Server Rece:" + receStr); System.out.println("Server Port:" + datagramPacket.getPort()); /***** 返回ACK消息数据报*/ // 组装数据报 byte[] buf = "I receive the message".getBytes(); DatagramPacket sendPacket = new DatagramPacket(buf, buf.length, datagramPacket.getAddress(), datagramPacket.getPort()); // 发送消息 datagramSocket.send(sendPacket); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭socket if (datagramSocket != null) { datagramSocket.close(); } } } }
2)客户端
/*** * UDP客户端Client端 ***/ public class UdpClient { private String sendStr = "SendString"; private String netAddress = "127.0.0.1"; private final intPORT_NUM = 5066; private DatagramSocket datagramSocket; private DatagramPacket datagramPacket; public UdpClient(){ try { /*** 发送数据***/ // 初始化datagramSocket,注意与前面Server端实现的区别 datagramSocket = new DatagramSocket(); // 使用DatagramPacket(byte buf[], int length, InetAddress address, int port)函数组装发送UDP数据报 byte[] buf = sendStr.getBytes(); InetAddress address = InetAddress.getByName(netAddress); datagramPacket = new DatagramPacket(buf, buf.length, address, PORT_NUM); // 发送数据 datagramSocket.send(datagramPacket); /*** 接收数据***/ byte[] receBuf = new byte[1024]; DatagramPacket recePacket = new DatagramPacket(receBuf, receBuf.length); datagramSocket.receive(recePacket); String receStr = new String(recePacket.getData(), 0 , recePacket.getLength()); System.out.println("Client Rece Ack:" + receStr); System.out.println(recePacket.getPort()); } catch (SocketException e) { e.printStackTrace(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭socket if(datagramSocket != null){ datagramSocket.close(); } } } }
相关文章推荐
- IntelliJ IDEA 14.x 创建工作空间与多个Java Web项目
- 杭电ACM2044java做法
- Java中this关键字用法详解
- java中static关键字的用法详解
- Java 泛型数组 不支持
- 08 JAVA 线程 内存模型(二)
- java mavn 1. 概要 安装
- MyEclipse6.6 汉化过程
- 搭建java开发环境
- java封装AES加密算法
- 每日20行之4~~~两种方法java实现简易计算器 附带复杂计算器代码(优先级顺序)
- java Servlet小结
- java类的特性(一)
- SpringMVC+KindEditor在线编辑器之文件上传
- JAVA实现字符串表达式求值
- 泛型使用一例子
- Java自带排序方法
- 嘚吧嘚java的发展历史
- java url 下载
- java调用身份证接口查询