UDP通信案例:實現收發數據
UDP協議的特點
- 面向無連接的協議
- 發送端只管發送,不確認對方是否能收到。
- 基於數據包進行數據傳輸。
- 發送數據的大小限制64K以內
- 因為面向無連接,速度快,但是不可靠。
UDP協議的使用場景
-
即時通訊
-
在線視頻
-
網絡語音電話
UDP協議相關的兩個類
* DatagramPacket
- 數據包對象
- 作用:用來封裝要發送或要接收的數據,比如:集裝箱
* DategramSocket
- 發送對象
- 作用:用來發送或接收數據包,比如:碼頭
DatagramPacket類構造方法
* DatagramPacket(byte[] buf, int length, InetAddress address, int port)
-
創建發送端數據包對象
-
buf:要發送的內容,字節數組
-
length:要發送內容的長度,單位是字節
-
address:接收端的IP地址對象
-
port:接收端的端口號
DatagramPacket(byte[] buf, int length)
-
創建接收端的數據包對象
-
buf:用來存儲接收到內容
-
length:能夠接收內容的長度
DatagramPacket類常用方法
* int getLength() 獲得實際接收到的字節個數
DatagramSocket類構造方法
* DatagramSocket() 創建發送端的Socket對象,系統會隨機分配一個端口號。
* DatagramSocket(int port) 創建接收端的Socket對象並指定端口號
DatagramSocket類成員方法
* void send(DatagramPacket dp) 發送數據包
* void receive(DatagramPacket p) 接收數據包
發送者:
package com.liqiliang.demo02_實現收發數據;
import java.io.IOException;
import java.net.*;
//發送端
public class Sender {
public static void main(String[] args) throws IOException {
//1.封裝要發送的數據:DatagramPacket
//發送的信息
byte[] msg ="你好我叫吳宇豪,我是傻X!".getBytes();
//發送給自己電腦
InetAddress localHost = InetAddress.getLocalHost();
//發送給別人電腦
InetAddress otherHost = InetAddress.getByName("192.168.37.14");
//端口號
int port = 8888;
DatagramPacket dp=
new DatagramPacket(msg,msg.length,otherHost,8888);
//2.創建碼頭,發送數據:DatagramSocket
DatagramSocket ds = new DatagramSocket();
System.out.println("准備發送數據");
ds.send(dp);
System.out.println("發送數據完畢");
}
}
接收者:
package com.liqiliang.demo02_實現收發數據;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Receiver {
public static void main(String[] args) throws IOException {
//1.准備一個空集裝箱接收數據:DatagramPacket
byte[] buff = new byte[1024];
DatagramPacket dp = new DatagramPacket(buff,buff.length);
//2.定義碼頭,接收對方發送的數據:DatagramSocket
DatagramSocket ds = new DatagramSocket(8888);
System.out.println("准備好接收信息了");
ds.receive(dp);
System.out.println("接收信息完畢........");
int len = dp.getLength();
//將收到的有效數據進行打印
System.out.println(new String(buff,0,len));
}
}