在大部份的網路應用裡,TCP 似乎比 UDP 來的多許多,程式人員通常也是對撰寫 TCP 程式比較熟悉,這裡將整理一些 UDP
程式設計的說明,希望對大家有幫助。
一開始先介紹三個最重要的類別,如下:
- DatagramPacket: UDP 的封包。
- DatagramSocket: 用來建立 UDP socket 的類別,包含 client 及 server。
- MulticastSocket: 用來建立群播 UDP socket 的類別,包含 client 和 server。
第一個程式,先寫個比較簡單的,只是點對點的 UDP 傳送,由 client 端送"Hello"這個訊息到 server 端,由 server
端將它顯示出來。
1 package idv.steven;
2
3 import java.io.IOException;
4 import java.net.DatagramPacket;
5 import java.net.DatagramSocket;
6 import java.net.InetAddress;
7
8 public class UDPClient {
9 public void run() throws IOException {
10 InetAddress addr = InetAddress.getLocalHost();
11 String data = "Hello";
12 byte[] buffer = data.getBytes();
13 DatagramPacket packet = new DatagramPacket(buffer, buffer.length, addr, 12345);
14
15 DatagramSocket dgSocket = new DatagramSocket();
16 dgSocket.send(packet);
17 }
18
19 public static void main(String[] args) throws IOException {
20 new UDPClient().run();
21 }
22 }
上面的程式是 client 端程式,會將"Hello"的訊息送到本機端 port 12345 的 UDP server,DatagramPacket 是在
java.net.* 這個 package 中,所規範的 UDP 網路連線方式,要傳送的封包,封包中除了要傳送的內容外,也封存了要傳送的位址,產生好封包後,透過
DatagramSocket 送出。
1 package idv.steven;
2
3 import java.io.IOException;
4 import java.net.DatagramPacket;
5 import java.net.DatagramSocket;
6
7 public class UDPServer {
8 public void run() throws IOException {
9 byte[] buffer = new byte[10];
10 DatagramPacket packet = new DatagramPacket(buffer, 10);
11 DatagramSocket dgSocket = new DatagramSocket(12345);
12 System.out.println("waiting ... (port: " + dgSocket.getLocalPort() +")");
13 dgSocket.receive(packet);
14 System.out.println("received, content below:");
15 for(int i = 0; i < buffer.length; i++) {
16 System.out.println(buffer[i]);
17 }
18 }
19
20 public static void main(String[] args) throws IOException {
21 new UDPServer().run();
22 }
23 }
Server 端的寫法也很簡單,同樣是使用 DatagramSocket 來產生 UDP 服務,建立這個類別時,指定要傾聽的 port 號後,呼叫
receive method,即可進行傾聽,程式在 block 在 receive method,以等待 client 端送來的訊息。當收到訊息時,訊息會被存入
DatagramPacket 中,第 15~17 行將收到的內容顯示出來,這裡顯示出來的是 ASCII 碼。測試時,先啟動 server,再啟動
client。
UDP 網路程式設計 (1) --- Getting Started,布布扣,bubuko.com
时间: 2024-12-26 18:44:44