Java案例——UDP通訊程式
阿新 • • 發佈:2022-04-20
需求:
1.UDP傳送資料:資料來源於鍵盤錄入,直到輸入的資料是over,傳送資料結束
2.UDP接收資料:不知道傳送端什麼時候停止傳送,採用死迴圈方式
分析:
傳送端:
1.建立傳送端DatagramSocket物件
2.使用BufferedReader物件完成封裝鍵盤錄入資料並判斷當資料不是over時正常傳送,是over時結束髮送
3.建立資料並打包
DatagramPacket(byte[] buf, int length, InetAddress address, int port)構造用於傳送長度的分組的資料報包
length`指定主機上到指定的埠號
4.呼叫DatagramSocket物件傳送資料
5.關閉傳送端
接收端:
1.建立接收端的Socket物件(DatagramSocket)要繫結指定的埠號
2.建立一個數據包,用於接收資料要注意資料包的長度
3.呼叫DatagramSocket物件的方法接收資料
4.解析資料包,並把資料在控制檯顯示
Demo
send傳送端類
package Demo042001;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/*傳送端
1.建立傳送端DatagramSocket物件
2.使用BufferedReader物件完成封裝鍵盤錄入資料並判斷當資料不是over時正常傳送,是over時結束髮送
3.建立資料並打包
DatagramPacket(byte[] buf, int length, InetAddress address, int port)` 構造用於傳送長度的分組的資料報包 `length`指定主機上到指定的埠號
4.呼叫DatagramSocket物件傳送資料
5.關閉傳送端
* */
public class SendDemo {
public static void main(String[] args) throws IOException {
//建立傳送端DatagramSocket物件
DatagramSocket ds=new DatagramSocket();
//2.使用BufferedReader物件完成封裝鍵盤錄入資料並判斷當資料不是over時正常傳送,是over時結束髮送
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line=br.readLine())!=null){
if ("over".equals(line)){
break;
}
//建立資料並打包
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
// 構造用於傳送長度的分組的資料報包 `length`指定主機上到指定的埠號
byte[] bytes=line.getBytes();
DatagramPacket dp=new DatagramPacket(bytes,bytes.length, InetAddress.getByName("cy"),12345);
ds.send(dp);
}
//關閉傳送端
ds.close();
}
}
Recive接收端類
package Demo042001;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/*接收端
1.建立接收端的Socket物件(DatagramSocket)要繫結指定的埠號
2.建立一個數據包,用於接收資料要注意資料包的長度
3.呼叫DatagramSocket物件的方法接收資料
4.解析資料包,並把資料在控制檯顯示
* */
public class ReciveDemo {
public static void main(String[] args) throws IOException {
//建立接收端的Socket物件(DatagramSocket)要繫結指定的埠號
DatagramSocket ds = new DatagramSocket(12345);
while (true) {
//建立一個數據包,用於接收資料要注意資料包的長度
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
//呼叫DatagramSocket物件的方法接收資料
ds.receive(dp);
//解析資料包,並把資料在控制檯顯示
System.out.println("資料是:\r\n"+new String(dp.getData(),0,dp.getLength()));
}
}
}