UDP簡述
UDP是一種無連接配接傳輸協定(網絡中傳輸的資料格式在網絡程式設計中就被稱作協定)。該協定稱為使用者資料報協定。
UDP特點
1.無連接配接。隻要知道對端的IP和端口号就可以直接進行傳輸而不需要建立連接配接(例如生活中的發短信,隻管發,不在意對方是否能收到)
2.不可靠。沒有确認機制,沒有重傳機制。(例如打微信電話時候網絡不穩定或是信号不好,聽不清楚對方說什麼,這就是因為丢失資料包導緻的)
3.速度快。UDP是IOS模型傳輸層其中之一,除此之外還有TCP,TCP控制相對來說比較複雜,其中使用到的機制包括三次握手、流量控制、滑動視窗、序列号、确認号等,鍊路比較多。而UDP是無連接配接的,鍊路的開銷比較小是以速度快
代碼實作
用戶端
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
try {
//建立發送端套接字
DatagramSocket socket = new DatagramSocket();
//指定ip
InetAddress ip = InetAddress.getByName("localhost");
//指定一個端口
int port = 9999;
//建立一個容器
byte data[];
while(true){
System.out.println("你發送的東西");
String str = sca.next();
//把資料放進容器
data = str.getBytes();
//打包資料
DatagramPacket packet = new DatagramPacket(data, data.length,ip,port);
//發送資料報包
socket.send(packet);
if (str.equals("exit")){
break;
}
}
//釋放資源
socket.close();
} catch (SocketException | UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
伺服器
import java.io.IOException;
import java.net.*;
public class Server{
public static void main(String[] args) {
try {
//建立套接字并将其綁定到本地主機上的指定端口。
DatagramSocket socket = new DatagramSocket(9999);
//建立接受資料的容器
byte []data = new byte[1024];
//建立一個接受資料的資料包
DatagramPacket datagramPacket = new DatagramPacket(data, data.length);
while(true){
//開始接收資料
socket.receive(datagramPacket);
//解析資料
String str = new String(datagramPacket.getData(),0, datagramPacket.getLength());
//接收到的資料
System.out.println(datagramPacket.getAddress()+"發送的消息:"+str);
if (str.equals("exit")){
break;
}
}
socket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
PS:先啟動伺服器再啟動用戶端