UDP的通訊與TCP的不同,UDP使用DatagramPacket和DatagramSocket:DatagramPacket表示存放數據的數據報,DatagramSocket表示接受或發送數據報的套接字.TCP使用ServerSocket和Socket。
UDP示例源碼(註釋很詳細):
1.發送UDP數據報的一端,假設爲server:
public class UDPServerDemo { public static void main(String[] args) { String info = "我是帥到被人砍的Mr Zhang"; //要發送的信息 byte[] bytes = info.getBytes(); //字節數組 //封裝一個udp數據包 try { DatagramPacket dp = new DatagramPacket( bytes,//數據包數據 0,//分組數據偏移量 bytes.length,//長度 InetAddress.getByName("127.0.0.1"),//目的地址 8000//目的端口號 ); //DatagramPacket表示存放數據的數據報,DatagramSocket表示接受或發送數據報的套接字 DatagramSocket socket = new DatagramSocket(9000);//本程序端口 socket.send(dp); //發送用send()即可 socket.close(); //記得關閉socket } catch (UnknownHostException | SocketException e) {//某些異常不可以放在一起的 e.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } }
2.接收數據報的一端,假設爲client:
public class UDPClientDemo { public static void main(String[] args) { byte[] bytes = new byte[1024]; DatagramPacket dp = new DatagramPacket(bytes,bytes.length);//空的 try { DatagramSocket socket = new DatagramSocket(8000); System.out.println("正在接受數據中"); socket.receive(dp);//開始接收數據 String s = new String(dp.getData(),0,dp.getLength()); System.out.println(s); socket.close(); } catch (SocketException e) { e.printStackTrace(); }catch (IOException e1){ e1.printStackTrace(); } } }
3.程序效果圖(要先運行client,使其處於接收數據的狀態,再運行server):