(1)InetAddress getAddress()
返回發送端或者接收端的IP地址,得看在哪一端。
(2)int getPort()
返回發送端或者接收端的端口號。
(3)bytep[] getData()
返回將要接收或者發送的數據。
(4)int getLength()
返回將要接收或者發送的數據的長度。java
(1)DatagramSocket()
該構造方法用於建立發送端的DatagramSocket對象,沒有指定端口,系統會自動分配一個。
(2)DatagramSocket(int port)
既能夠用於發送端又能夠用於接收端。在用於接收端的時候必須指定端口號,這樣才能監聽端口。
(3)DatagramSocket(int port,InetAddress addr)
該對象適用於計算機上有多塊網卡的情形,使用時能夠明確規定數據經過哪塊網卡向外發送和接收 哪塊網卡的數據。因爲計算機中針對不一樣的網卡分配不一樣的IP地址,所以在建立對象的時候須要指定IP地址。node
(1)void receive(DatagramPacket p)
將接受到的數據填充到DatagramPacket數據包中,在接收到數據以前會一直處於阻塞狀態,只有當接收到數據包的時,該方法纔會返回。
(2)void send(DatagramPacket p)
放送DatagramPacket數據包,發送的數據包中包含將要發送的數據,數據的長度,遠程主機的IP地址和端口號。
(3)void close
關閉當前的Socket,通知驅動程序釋放爲這個Socket保留的資源。git
package com.bjpowernode.java_learning; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class D128_1_ServerTest { public static void main(String[] args) { DatagramSocket socket = null; DatagramPacket packet_send = null; DatagramPacket packet_receive = null; int port = 5151; //服務器監聽端口號 try { socket = new DatagramSocket(port); //建立鏈接對象 System.out.println("服務器啓動"); byte[] r = new byte[1024]; //建立緩存數組 packet_receive = new DatagramPacket(r,r.length);//建立數據包對象 socket.receive(packet_receive); //接收數據包 InetAddress client_ip = packet_receive.getAddress();//客戶端地址 int client_port = packet_receive.getPort(); //客戶端的端口號 byte[] data = packet_receive.getData(); //客戶端字節數據 int len = packet_receive.getLength(); //數據有效長度 String str1 = new String(data,0,len); //將字節數據轉換爲字符串 System.out.println("客戶機"+client_ip+":"+client_port+"\n發送的信息是:"+str1); String response = "Hello,I am Server B"; byte[] s = response.getBytes(); packet_send = new DatagramPacket(s,s.length,client_ip,client_port);//建立響應數據包對象 socket.send(packet_send); }catch(Exception e) { System.out.println(e); }finally { socket.close(); } } }
package com.bjpowernode.java_learning; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class D128_2_ClientTest { public static void main(String[] args) { DatagramSocket socket = null; DatagramPacket packet_send = null; DatagramPacket packet_receive = null; String server = "127.0.0.1"; //服務器IP地址 int port = 5151; //服務器端口號 String str = "Hello,I am Client A"; byte[] data = str.getBytes(); //將要發送的信息轉換爲字節數組 try { socket = new DatagramSocket(); //建立鏈接socket對象 InetAddress addr = InetAddress.getByName(server); //將服務器端的IP地址封裝成InetAddress對象 packet_send = new DatagramPacket(data,data.length,addr,port);//建立數據包對象 socket.send(packet_send); //向服務器發送數據 byte[] r = new byte[1024]; //設置緩衝區 packet_receive = new DatagramPacket(data,data.length,addr,port);//建立數據包對象 socket.receive(packet_receive); //接收數據包 byte[] response = packet_receive.getData(); //讀取數據包中的數據信息 int len = packet_receive.getLength(); //讀取數據長度 String str1 = new String(response,0,len); //將字節數據轉換成字符串 System.out.println("服務器響應的信息是:"+str1); }catch(Exception e) { System.out.println(e); }finally { socket.close(); } } }