您的位置:首页 > 其它

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

2016-03-29 15:07 555 查看
前面的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 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();
}
}
}


然后再运行看看结果。

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

服务端控制台:

客户端控制台:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: