簡單的UDP編程1
阿新 • • 發佈:2017-12-24
byte 單向 結果 bubuko ima sys 數據封裝 編程 stat
服務端:
1 package udp; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.SocketException; 7 8 //服務器 9 public class AskServer { 10 public static void main(String[] args) throws IOException { 11 //1.創建一個DatagramSocket 用來發送或者接收數據的AskServer.java12 DatagramSocket socket = new DatagramSocket(8888);//端口用來接收數據 13 14 //2.使用DatagramSocket接收數據 15 //接收數據 要使用 DatagramPacket 16 byte [] buf = new byte [1024];//接收數據不需要知道對方IP 17 DatagramPacket packet = new DatagramPacket(buf, buf.length); 18 socket.receive(packet);19 //System.out.println(packet.getLength());//數據包的長度 20 //System.out.println(packet.getData());//對方發送的數據 21 //System.out.println(new String(packet.getData(),0,packet.getLength())); 22 System.out.println("來自客戶端的消息:"+new String(buf,0,packet.getLength())); 23 /* System.out.println(packet.getAddress());//對方的ip?24 System.out.println(packet.getPort());//對方的端口號*/ 25 26 //3.向客戶端發送數據 27 String reply ="親,在的"; 28 byte [] buf2 = reply.getBytes(); 29 //對方的IP可能隨時變化 通過接收的數據包能夠獲取對方的ip和端口 30 DatagramPacket packet2 = new DatagramPacket(buf2, buf2.length, packet.getAddress(), packet.getPort()); 31 socket.send(packet2); 32 33 //4.關閉 34 socket.close(); 35 } 36 }
客戶端:
1 package udp; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 import java.net.SocketException; 8 import java.net.UnknownHostException; 9 10 /** 11 * @author superdrew 12 * 功能:客戶和咨詢師在線交流 13 * 使用udp完成 14 * 註意: 15 * 1.udp沒有嚴格意義區分服務端和客戶端,雙方都是平等的(主動發送請求是客戶端,被動接收請求的是服務端) 16 * 2.udp編程和IO流沒有關系 17 * 3.udp兩個核心類 18 * DatagramSocket:用來接收或者發送數據包 19 * DatagramPacket:數據包 20 * 4.客戶端不寫 port 端口 會 自動生成一個端口 21 * 22 * 分解1:先完成一次單向通信 23 * 2:一次雙向通信 24 * 3:多次雙向通信 25 * 26 * 總結:1。DatagramSocket 27 * 用來接收和發送數據的 28 * socket.send(packet) 29 * socket.receive(packet2) 30 * 2。DatagramPacket 31 * 封裝了數據,對方的IP,對方的接收端口 32 * getLength() 獲取對方發送數據的長度 33 * getData() 獲取對方發送的數據 (字節數組) 34 * getAddress() 獲取對方的ip 35 * getPort() 獲取對方的發送數據的端口 36 * 37 */ 38 39 public class AskClient { 40 public static void main(String[] args) throws IOException { 41 //1.創建DatagramSocket 用來發送數據 42 DatagramSocket socket = new DatagramSocket(9999);//發送端的端口 43 44 //2.使用DatagramSocket發送數據 45 //發送數據只前 要 創建 DatagramPacket 數據包 46 String info = "親,在嗎?"; 47 byte [] buf = info.getBytes(); 48 DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(),8888); 49 socket.send(packet); 50 51 byte [] buf2 = new byte [1024]; 52 DatagramPacket packet2 = new DatagramPacket(buf2,buf2.length); 53 socket.receive(packet2);//接收的數據都放到packet2裏面了 對方發送的數據封裝到了buf2 用 packet2.getData 效果是一樣的s 54 String result = new String(buf2,0,buf2.length); 55 System.out.println("來自服務器的消息:"+result); 56 57 //3.關閉資源 58 socket.close(); 59 } 60 61 }AskClient.java
操作步驟:
① 運行服務端;② 運行客戶端;
結果展示:
簡單的UDP編程1