UDP數據通信,使用一個DatagramSocket實現向多個地址發送數據和接收各個地址的數據返回

有時候需要一個客戶端向多個地址發送數據並接收返回的需求

 

1、創建DatagramSocket

DatagramSocket 有多個構造方法

DatagramSocket():創建一個DatagramSocket實例,並將該對象綁定到本機默認IP地址、本機所有可用端口中隨機選擇的某個端口。

DatagramSocket(int prot):創建一個DatagramSocket實例,並將該對象綁定到本機默認IP地址、指定端口。

DatagramSocket(int port, InetAddress laddr):創建一個DatagramSocket實例,並將該對象綁定到指定IP地址、指定端口。

通過上面三個構造器中的任意一個構造器即可創建一個DatagramSocket實例,但是我們目的是需要向不同的地址發送數據,所以我們使用第一種構造方法

DatagramSocket mSocket = new DatagramSocket

 

2、發送數據

//需要發送的數據
byte[]datas = "data"
//hostIP 需要發送的地址
InetAddress address = InetAddress.getByName(hostIP);
//需要發送的數據包,hostPort 發送的端口
DatagramPacket packet = new DatagramPacket(datas, datas.length, address, hostPort);
//發送數據
mSocket.send(packet);

往不同的服務器發送數據,只需要啓動多個線程,調用上面的方法,替換地址和端口即可 

//connect方法的意思是將socket與指定地址綁定,綁定成功後只能往該地址發送數據。並不是建立連接,因爲udp是面向非連接的
mSocket.connect(address, hostPort);

3、接收數據

//持續接收數據
while(!mStop){
byte datas[] = new byte[256]; 
DatagramPacket packet = new DatagramPacket(datas, datas.length); 
mSocket.receive(packet);//阻塞調用,直到返回數據 
String receiveMsg = new String(packet);
}

 

使用DatagramSocket發送數據報時,DatagramSocket並不知道將該數據報發送到哪裏,而是由DatagramPacket自身決定數據報的目的地。接收數據時,DatagramPacket並沒有指定地址,默認所有地址的包都能接收。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章