您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關使用UDP實現簡單服務端客戶端的示例,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
首先寫服務端代碼,服務端邦定本地的IP和端口來監聽訪問:
package udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; /** * UDP服務類 */ public class UdpServerSocket { private byte[] buffer = new byte[1024]; private static DatagramSocket ds = null; private DatagramPacket packet = null; private InetSocketAddress socketAddress = null; /** * 測試方法 */ public static void main(String[] args) throws Exception { String serverHost = "127.0.0.1"; int serverPort = 3344; UdpServerSocket udpServerSocket = new UdpServerSocket(serverHost, serverPort); while (true) { udpServerSocket.receive(); udpServerSocket.response("你好,吃了嗎!"); } } /** * 構造函數,綁定主機和端口 */ public UdpServerSocket(String host, int port) throws Exception { socketAddress = new InetSocketAddress(host, port); ds = new DatagramSocket(socketAddress); System.out.println("服務端啟動!"); } /** * 接收數據包,該方法會造成線程阻塞 */ public final String receive() throws IOException { packet = new DatagramPacket(buffer, buffer.length); ds.receive(packet); String info = new String(packet.getData(), 0, packet.getLength()); System.out.println("接收信息:" + info); return info; } /** * 將響應包發送給請求端 */ public final void response(String info) throws IOException { System.out.println("客戶端地址 : " + packet.getAddress().getHostAddress() + ",端口:" + packet.getPort()); DatagramPacket dp = new DatagramPacket(buffer, buffer.length, packet .getAddress(), packet.getPort()); dp.setData(info.getBytes()); ds.send(dp); } }
運行后提示服務端運行成功,程序開始監聽端口,接收方法堵塞,當有訪問時才會向下進行!
我們寫客戶端進行訪問,看到網上的例子都是直接創建了 DatagramSocket 對象,而其實自己都不知道自己使用的端口是那個,這里我創建時會指定自己邦定的端口,其實很簡單,就是初始化該對象時傳遞一個端口參數。
這里你訪問客戶端時客戶端會打印你的IP和端口!
看一看客戶端代碼:
package udp; import java.io.*; import java.net.*; /** * UDP客戶端程序,用于對服務端發送數據,并接收服務端的回應信息 */ public class UdpClientSocket { private byte[] buffer = new byte[1024]; private static DatagramSocket ds = null; /** * 測試客戶端發包和接收回應信息的方法 */ public static void main(String[] args) throws Exception { UdpClientSocket client = new UdpClientSocket(); String serverHost = "127.0.0.1"; int serverPort = 3344; client.send(serverHost, serverPort, ("你好,親愛的!").getBytes()); byte[] bt = client.receive(); System.out.println("服務端回應數據:" + new String(bt)); // 關閉連接 try { ds.close(); } catch (Exception ex) { ex.printStackTrace(); } } /** * 構造函數,創建UDP客戶端 */ public UdpClientSocket() throws Exception { ds = new DatagramSocket(8899); // 邦定本地端口作為客戶端 } /** * 向指定的服務端發送數據信息 */ public final void send(final String host, final int port, final byte[] bytes) throws IOException { DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName(host), port); ds.send(dp); } /** * 接收從指定的服務端發回的數據 */ public final byte[] receive() throws Exception { DatagramPacket dp = new DatagramPacket(buffer, buffer.length); ds.receive(dp); byte[] data = new byte[dp.getLength()]; System.arraycopy(dp.getData(), 0, data, 0, dp.getLength()); return data; } }
直接運行程序看效果!
關于使用UDP實現簡單服務端客戶端的示例就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。