UDP:它是一种无连接协议,数据想发就发,而且不会建立可靠传输,也就是说传输过程中有可能会导致部分数据丢失,但是它比TCP传输更加简单高效,适合视频直播之类的。
DatagramSocket :发送和接受DatagramPacket数据报
DatagramPacket:封装UDP中传送的数据
注:DatagramPacket在接收端和发送端的构造方法有所不同。在接收端,构造方法只需要存储数据的字节数组;在发送端,还需要配上目标IP地址和端口号
接收端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceiver {
public static void main(String[] args) {
try (DatagramSocket datagramSocket = new DatagramSocket(8900)) {
byte[] bytes = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
System.out.println("等待接收数据");
datagramSocket.receive(datagramPacket);//发生阻塞
String str = new String(datagramPacket.getData(), 0, datagramPacket.getLength());
System.out.println(datagramPacket.getAddress().getHostName() + ":"
+ datagramPacket.getPort() + "发送消息:" + str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
发送端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class UDPSender {
public static void main(String[] args) {
try (DatagramSocket datagramSocket = new DatagramSocket(3000);
Scanner scanner = new Scanner(System.in)) {
System.out.println("请输入要发送的内容");
String str = scanner.nextLine();
DatagramPacket datagramPacket = new DatagramPacket(str.getBytes(), str.getBytes().length,
InetAddress.getLocalHost(), 8900);
System.out.println("开始发送信息");
datagramSocket.send(datagramPacket);
} catch (IOException e) {
e.printStackTrace();
}
}
}