需求:
UDP發送端:數據來自於鍵盤錄入,直到輸入的數據是886,發送數據結束
UDP接收端:因爲接收端不知道發送端什麼時候停止發送,故採用死循環接收
實現:
SendDemo.java
package com.yang.scoket.udp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* @author WangYang
* @version 1.0
* @create 2020-02-15 11:28
* <p>
* UDP 發送數據
* 數據來自於鍵盤錄入,直到輸入的數據是886,發送數據結束
*/
public class SendDemo {
public static void main(String[] args) throws IOException {
//創建發送端的socket對象
DatagramSocket socket = new DatagramSocket();
//讀入鍵盤錄入的數據
BufferedReader bis = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = bis.readLine()) != null) {
//創建數據,並把數據打包
byte[] by = line.getBytes();
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket dp = new DatagramPacket(by, by.length, address, 10086);
//發送數據
socket.send(dp);
if ("886".equals(line)) {//如果輸入的數據是886,結束髮送端
break;
}
}
//關閉發送端
socket.close();
}
}
ReceiveDemo.java
package com.yang.scoket.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* @author WangYang
* @version 1.0
* @create 2020-02-15 11:43
*
* UDP接收數據:
* 因爲接收端不知道發送端什麼時候停止發送,故採用死循環接收
*/
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
//創建接收端的Socket對象(DatagramSocket)
DatagramSocket receive = new DatagramSocket(10086);
while (true){
//創建一個數據包,用於接收數據
byte[] by = new byte[1024];
DatagramPacket dp = new DatagramPacket(by,by.length);
//調用DatagramSocket對象的方法接收數據
receive.receive(dp);
//解析數據包,並把數據在控制檯顯示
System.out.println("接收的數據是:" + new String(dp.getData(),0,dp.getLength()));
}
//死循環接收,不需要關閉接收端
//receive.close();
}
}
結果: