基于UDP实现简单的客户端服务端的消息传递
2016-03-29 15:07
555 查看
前面的TCP是有可靠的,有序的。现在看看UDP,UDP是不可靠的,无序的。
现在看看实现:
这里我也用两个类模拟了客户端与服务端,
现在直接看下代码:
UDPServer.java:
再看看客户端:
UDPClient.java:
然后再运行看看结果。
同样的,我们也要先启动客户端,在启动客户端
服务端控制台:
客户端控制台:
现在看看实现:
这里我也用两个类模拟了客户端与服务端,
现在直接看下代码:
UDPServer.java:
package com.socket.udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; /** * UDP 服务端 * * @author lolli * */ public class UDPServer { public static void main(String[] args) { try { // 创建服务器端的DatagramSocket,并指定端口 DatagramSocket datagramSocket = new DatagramSocket(8888); System.out.println("***** 启动服务器,等待客户端的连接请求 ******"); byte[] data = new byte[2048]; // 创建数据报,用户接受客户端请求的数据 DatagramPacket datagramPacket = new DatagramPacket(data, data.length); // 接收客户端请求的数据(在接收到数据之前一直处于阻塞状态) datagramSocket.receive(datagramPacket); // 获取请求的数据,并转成String打印出来 String clientData = new String(data, 0, datagramPacket.getLength()); System.out.println("我是服务端,客户端请求的数据为:" + clientData); // *** 给客户端进行相应 *** // 定义客户端的地址 InetAddress inetAddress = datagramPacket.getAddress(); int port = datagramPacket.getPort(); byte[] backData = "我接受到了客户端的数据,你好!".getBytes(); // 创建数据包,给客户端响应数据 DatagramPacket backDatagramPacket = new DatagramPacket(backData, backData.length, inetAddress, port); // 给客户端发送数据 datagramSocket.send(backDatagramPacket); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
再看看客户端:
UDPClient.java:
package com.socket.udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; /** * UDP 客户端 * @author lolli * */ public class UDPClient { public static void main(String[] args) { try { // 定义服务器地址 InetAddress inetAddress = InetAddress.getByName("localhost"); byte[] data = "我是客户端,hello".getBytes(); // 创建数据报,准备数据 DatagramPacket datagramPacket = new DatagramPacket(data, data.length, inetAddress, 8888); // 创建一个DatagramSocket DatagramSocket datagramSocket = new DatagramSocket(); // 发送请求 datagramSocket.send(datagramPacket); // *** 接收服务端响应回来的数据 *** byte[] resData = new byte[2048]; // 创建数据报,用户接受客户端请求的数据 DatagramPacket resDatagramPacket = new DatagramPacket(resData, resData.length); // 接收客户端请求的数据(在接收到数据之前一直处于阻塞状态) datagramSocket.receive(resDatagramPacket); // 获取请求的数据,并转成String打印出来 String serverData = new String(resData, 0, resDatagramPacket.getLength()); System.out.println("我是客户端,服务端响应的数据为:" + serverData); datagramSocket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
然后再运行看看结果。
同样的,我们也要先启动客户端,在启动客户端
服务端控制台:
客户端控制台:
相关文章推荐
- C#添加DLL文件
- interrupt 和 using 在C51中断中的使用
- JAVA数据类型自动转换,与强制转换
- centos搭建SVN三部曲
- fis总结
- 知道聚类图的绘制及中心的绘制,真的很重要
- java多线程机制
- Android学习笔记---- HttpClient获取服务器数据
- java笔记5→String字符串
- Retrofit2.0 的使用
- cmake编写CMakeLists
- Java实现字符串反转
- 阻止页面自动提交ajax
- 关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- leetcode——204.——Count Primes
- Android各个Support Library介绍
- 1分钟教会你SpringMVC多文件上传
- 构造函数不可虚,析构可以虚
- Spring Task定时任务
- Java finalize方法使用