数据报是网上传输的独立数据包,数据报是否能正确地到达目的地,到达的时间,顺序,内容的正确性均没有保障。
Java中使用Datagram与DatagramPacket类
DatagramSocket类利用UDP协议来实现客户与服务器的Socket
send()方法用于发送数据报
receive()方法接收数据报
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Server {
public static void main(String[] args) throws Exception {
DatagramSocket datagramSocket = new DatagramSocket(5678);
// 服务端收到数据报后会放到DatagramPacket中
byte[] buffer = new byte[100];
DatagramPacket datagramPacket = new DatagramPacket(buffer, 100);
// 接收数据报,放到datagramPacket中去
datagramSocket.receive(datagramPacket);
// 接收到的数据内容
byte[] data = datagramPacket.getData();
System.out.println("receive from client : "
+ new String(data, 0, datagramPacket.getLength()));
// 客户端地址
InetAddress address = datagramPacket.getAddress();
// 客户端端口
int port = datagramPacket.getPort();
//获取字符内容长度,准备返回给客户端
int strLength = datagramPacket.getLength();
//构建返回的数据报
DatagramPacket datagramPacket2 = new DatagramPacket(String.valueOf(
strLength).getBytes(), String.valueOf(strLength).length(),
address, port);
//发送回客户端
datagramSocket.send(datagramPacket2);
datagramSocket.close();
}
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Client {
public static void main(String[] args) throws Exception {
DatagramSocket datagramSocket = new DatagramSocket();
String content = "hello world";
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket datagramPacket = new DatagramPacket(content.getBytes(),
content.length(), address, 5678);
//将构建好的数据报发送到服务端
datagramSocket.send(datagramPacket);
//接收服务端返回的内容到datagramPacket2
byte[] buffer = new byte[100];
DatagramPacket datagramPacket2 = new DatagramPacket(buffer, 100);
datagramSocket.receive(datagramPacket2);
// 输出接收到的数据内容
byte[] data = datagramPacket2.getData();
System.out.println("receive from server : "
+ new String(data, 0, datagramPacket2.getLength()));
datagramSocket.close();
}
}