DatagramSocket類: 構造方法: DatagramSocket(): 表示建立一個默認的套接字,並綁定到本地地址和一個隨機的端口號 DatagramSocket(int port): 與上面不一樣的是,綁定到特定端口號,其它不變 DatagramSocket(int port, InetAddress iad): 表示建立一個套接字,綁定到特定的端口號及指定地址 DatagramSocket(SocketAddress sad); 表示建立一個套接字,綁定到特定的套接字地址 小提示:所謂的本地地址咱們能夠這樣來理解,咱們經過「控制面板-本地鏈接-支持」中能夠看到一個IP地址,這就是本地的IP地址,也暫且理解爲本地地址。 基本方法: close(): 關閉套接字 recevie(DatagramPacket dp): 接受數據報 send(DatagramPacket dp): 發送數據報 這裏觸及了數據報,下面介紹數據報: DatagramPacket類: 構造方法:(只列出主要的) 接受類型: DatagramPacket(byte[] buf, int length): 用來接受長度爲length的buf數據(即數據存於字節數組buf中) 發送類型: DatagramPacket(byte[] buf, int length, InetAddress address, int port); 將length長的buf數據發送到指定的地址的端口號處 DatagramPacket(byte[] buf, int length, SocketAddress address); 將length長的buf數據發送到指定的套接字地址處 有上面可知,咱們發送數據時構造的數據報應該是發送類型的,而接受數據報時應該是接受類型的 開始書寫代碼 代碼意圖: 1.一個接收方,一個發送方 2.當接收方收到發送方發送的消息後,打印發送的消息及發送方的地址和端口號,以後向發送反饋一條信息「接受方:我收到了!」 3.發送方打印出接收方反饋的消息 詳細思路見代碼:
接收方:java
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketAddress; public class Getter { public static void main(String[] args) { try { //肯定接受方的IP和端口號,IP地址爲本地機器地址 InetAddress ip = InetAddress.getLocalHost(); int port = 8888; //建立接收方的套接字,並制定端口號和IP地址 DatagramSocket getSocket = new DatagramSocket(port,ip); //肯定數據報接受的數據的數組大小 byte[] buf = new byte[1024]; //建立接受類型的數據報,數據將存儲在buf中 DatagramPacket getPacket = new DatagramPacket(buf,buf.length); //經過套接字接收數據 getSocket.receive(getPacket); //解析發送方傳遞的消息,並打印 String getMes = new String(buf,0,getPacket.getLength()); System.out.println("對方發送的消息:"+getMes); //經過數據報獲得發送方的IP和端口號,並打印 InetAddress sendIP = getPacket.getAddress(); int sendPort = getPacket.getPort(); System.out.println("對方的IP地址是:"+sendIP.getHostAddress()); System.out.println("對方的端口號是:"+sendPort); //經過數據報獲得發送方的套接字地址 SocketAddress sendAddress = getPacket.getSocketAddress(); //肯定要反饋發送方的消息內容,並轉換爲字節數組 String feedback = "接收方說:我收到了!"; byte[] backBuf = feedback.getBytes(); //建立發送類型的數據報 DatagramPacket sendPacket = new DatagramPacket(backBuf,backBuf.length,sendAddress); //經過套接字發送數據 getSocket.send(sendPacket); //關閉套接字 getSocket.close(); } catch (Exception e) { e.printStackTrace(); } } }
發送方:數組
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class Sender { public static void main(String[] args) { try { //建立發送方的套接字,IP默認爲本地,端口號隨機 DatagramSocket sendSocket = new DatagramSocket(); //肯定要發送的消息: String mes = "你好!接收方!"; //因爲數據報的數據是以字符數組傳的形式存儲的,因此傳轉數據 byte[] buf = mes.getBytes(); //肯定發送方的IP地址及端口號,地址爲本地機器地址 int port = 8888; InetAddress ip = InetAddress.getLocalHost(); //建立發送類型的數據報: DatagramPacket sendPacket = new DatagramPacket(buf,buf.length,ip,port); //經過套接字發送數據: sendSocket.send(sendPacket); //肯定接受反饋數據的緩衝存儲器,即存儲數據的字節數組 byte[] getBuf = new byte[1024]; //建立接受類型的數據報 DatagramPacket getPacket = new DatagramPacket(getBuf,getBuf.length); //經過套接字接受數據 sendSocket.receive(getPacket); //解析反饋的消息,並打印 String backMes = new String(getBuf,0,getPacket.getLength()); System.out.println("接受方返回的消息:"+backMes); //關閉套接字 sendSocket.close(); } catch (Exception e) { e.printStackTrace(); } } }