Java 網路程式設計 -- UDP
Java 網路程式簡介IPURLUDPTCPTelnetWebServer網頁下載網路爬蟲Proxy瀏覽器訊息相關網站參考文獻最新修改簡體版English |
在本範例中,我們建立了一個 UDP 封包的 Server,佔用 port 5555,然後利用 UDP Client 連續的發送 100 個封包給 Server。 UDPServer 的工作是,每當收到一個封包就會印出來。但是由於 UDP Client 連續發送封包的速度太快了,導至伺服器來不及接收,於是有些封包因此而遺失了,因此在執行結果中,您會看到 UDPServer 只收到了 55 個封包,而非 UDP Client 所送出的 100 個。 程式範例: UDPServer.javaimport java.io.*; import java.net.*; // 1. 本程式必須與 UdpClient.java 程式搭配執行,先執行本程式再執行 UdpClient。 // 2. 執行方法 : java UdpServer public class UdpServer { int port; // 連接埠 public static void main(String args[]) throws Exception { UdpServer server = new UdpServer(5555); // 建立 UdpServer 伺服器物件。 server.run(); // 執行該伺服器。 } public UdpServer(int pPort) { port = pPort; // 設定連接埠。 } public void run() throws Exception { final int SIZE = 8192; // 設定最大的訊息大小為 8192. byte buffer[] = new byte[SIZE]; // 設定訊息暫存區 for (int count = 0; ; count++) { DatagramPacket packet = new DatagramPacket(buffer, buffer.length); DatagramSocket socket = new DatagramSocket(port); // 設定接收的 UDP Socket. socket.receive(packet); // 接收封包。 String msg = new String(buffer, 0, packet.getLength()); // 將接收訊息轉換為字串。 System.out.println(count+" : receive = "+msg); // 印出接收到的訊息。 socket.close(); // 關閉 UDP Socket. } } } 程式範例: UDPClient.javaimport java.io.*; import java.net.*; // 1. 本程式必須與 UdpServer.java 程式搭配執行,先執行 UdpServer 再執行本程式。 // 2. 本程式必須有一個參數,指定伺服器的 IP。 // 用法範例: java UdpClient 127.0.0.1 public class UdpClient extends Thread { int port; // port : 連接埠 InetAddress server; // InetAddress 是 IP, 此處的 server 指的是伺服器 IP String msg; // 欲傳送的訊息,每個 UdpClient 只能傳送一個訊息。 public static void main(String args[]) throws Exception { for (int i=0; i<100; i++) { // 建立 UdpClient,設定傳送對象與傳送訊息。 UdpClient client = new UdpClient(args[0], 5555, "UdpClient : "+i+"th message"); client.run(); // 啟動 UdpClient 開始傳送。 } } public UdpClient(String pServer, int pPort, String pMsg) throws Exception { port = pPort; // 設定連接埠 server = InetAddress.getByName(pServer); // 將伺服器網址轉換為 IP。 msg = pMsg; // 設定傳送訊息。 } public void run() { try { byte buffer[] = msg.getBytes(); // 將訊息字串 msg 轉換為位元串。 // 封裝該位元串成為封包 DatagramPacket,同時指定傳送對象。 DatagramPacket packet = new DatagramPacket(buffer, buffer.length, server, port); DatagramSocket socket = new DatagramSocket(); // 建立傳送的 UDP Socket。 socket.send(packet); // 傳送 socket.close(); // 關閉 UDP socket. } catch (Exception e) { e.printStackTrace(); } // 若有錯誤產生,列印函數呼叫堆疊。 } } 執行結果UDP Server
UDP Client
|
page revision: 1, last edited: 08 Nov 2010 01:37
Post preview:
Close preview