udp协议的服务器是哪种类型,UDP协议
UDP協議
1.UDP使用場景
域名系統
若是執行時間內,沒有響應返回,證明包已丟失。
音頻或視頻
數據包的丟失只會造成通話或視頻的干擾和不清楚,而不會像TCP協議那樣造成通話的丟失或卡頓。
2.UDP和TCP的類比
UDP類似于郵局,數據的接受與否和到達順序,郵局是不可控的。但是可以通過數據報的數據,預先協商好協議,達到對數據順序和數據完整性的控制。
TCP類似于電話,通話的應答和響應是可控的。
3.UDP的傳輸形式和TCP的對比
UDP是以數據包的形式,而TCP中是通過流的形式傳輸。
UDP客戶端
1.創建客戶端的步驟
1、首先打開一個Socket連接
//客戶端使用隨機端口
DatagramSocket socket = new DatagramSocket(0);
2、設置一個連接超時時間
//UDP是無連接的網絡協議,不設置超時時間,即使遠程主機未在端口監聽,你也永遠接收不到回音
socket.setTimeOut(10000);
3、建立數據包,一個發送數據包,一個接收數據包
//發送數據包
InetAddress host = InetAddress.getByName("www.baiud.com");
DatagramPacket request = new DatagramPacket(new byte[1],1,host,9999);
//接收數據包
Byte byte = new Byte[1024];
DatagramPacket response = DatagramPacket(byte,byte.length);
socket.send(request);
socket.receive(response);
//注 java7中,DatagramSocket實現了AutoCloseablem,所以聲明socket時,可以使用 try-with-resources
try(DatagramSocket socket = new DatagramSocket(0)){
//連接到服務器
}catch(IOException ex){
Sysstem.err.println("Could not connect to ......")
}
2.示例
UDP服務器
1.與TCP的不同
模式與客戶端相同,不過在發送之前要先接收,而且不會選擇要綁定的匿名接口。與TCP不同,并沒有單獨的DatagramServerSocket類
2.創建注意事項
1、創建一個接收數據的請求包
DatagramPacket request = new DatagramPacket(new byte[1024],0,1024);
//這個調用會無限阻塞
scoket.receive(request);
2、創建一個響應包
//響應包的聲明規范對于服務器屬性是關聯的,此處的響應包需要指明響應的地址和端口
DatagramPacket response = new DatagramPacket(new byte[1],1,host,9999);
3.示例
DatagramPacket類
1、組成
UDP數據包是基于IP數據報建立的,只向其底層IP數據報添加了很少的一點內容。
向IP數據報首部添加了8字節。
UDP首部包括源和目標端口號、IP首部之后所有內容的長度,以及一個可選的校驗和。
端口號以2字節無符號整數給出,主機有65536個不同的UDP端口號可以使用,與每臺主機的65536個不同的TCP端口截然不同。
因此,數據包中的字節數不能超過65536減去首部的8個字節。
校驗和字段是可選的,應用層程序不適用這個校驗和,如果數據的校驗和失敗,那么底層網絡軟件會丟棄這個數據報,發送方和接收方都不會收到通知。畢竟,UDP是不可靠的協議。
2、UDP數據報長度
1、理論最大值
65507字節
2、實際限制
8192字節 8KB
3、為保證最大的安全性
512字節或更少
注意 TCP
TCP數據報也存在這個問題,但Socket和ServerScoket提供的是基于流的API,因此對程序員隱藏了這些細節。
3、DatagramPacket 類
只提供了獲取和設置IP首部中源或目標地址、獲取和設置源或目標端口、獲取和設置數據、以及獲取和設置數據長度。其余首部字段無法通過java代碼訪問。
1、構造函數
1、接收數據報的構造函數
2、發送數據報的構造函數
2、get方法
3、set方法
DatagramSocket 類
1、構造函數
2、發送和接收數據報
總結
以上是生活随笔為你收集整理的udp协议的服务器是哪种类型,UDP协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python判断是不是整数1002pyt
- 下一篇: 学习散列表