基于UDP实现简单的客户端服务端的消息传递

来源:互联网 发布:自制笛子开孔数据 编辑:程序博客网 时间:2024/06/05 04:24


前面的TCP是有可靠的,有序的。现在看看UDP,UDP是不可靠的,无序的。


现在看看实现:
这里我也用两个类模拟了客户端与服务端,

现在直接看下代码:


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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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);// 创建一个DatagramSocketDatagramSocket 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 blocke.printStackTrace();} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}


然后再运行看看结果。

同样的,我们也要先启动客户端,在启动客户端

服务端控制台:


客户端控制台:






1 0
原创粉丝点击