java.net.InetAddress類:此類表示互聯網協議 (IP) 地址。 靜態方法: static InetAddress getLocalHost() 返回本地主機(你自己的使用的電腦)。 static InetAddress getByName(String host) 在給定主機名的情 ...
java.net.InetAddress類:此類表示互聯網協議 (IP) 地址。
靜態方法:
static InetAddress getLocalHost() 返回本地主機(你自己的使用的電腦)。
static InetAddress getByName(String host) 在給定主機名的情況下確定主機的 IP 地址。
非靜態方法:
String getHostAddress() 返回 IP 地址字元串(以文本表現形式)。
String getHostName() 獲取此 IP 地址的主機名。
UDP通信的接收端:接收發送端發送的數據報包,拆包
* 和udp相關的類:
* java.net.DatagramPacket:此類表示數據報包。
* 作用:使用數據報包,接收發送端的數據
* java.net.DatagramSocket:此類表示用來發送和接收數據報包的套接字。
* 作用:發送數據報包,接收數據報包
* 套接字:綁定IP地址和埠號的網路對象
*
* 構造方法:
* DatagramPacket(byte[] buf, int length)
* 構造 DatagramPacket,用來接收長度為 length 的數據包。
* DatagramSocket(int port)
* 創建數據報套接字並將其綁定到本地主機上的指定埠。
*
* 成員方法:
* void receive(DatagramPacket p) 從此套接字接收數據報包。
*
* 實現步驟:
* 1.創建DatagramPacket對象,接收發送端的數據報
* 2.創建DatagramSocket對象,並且和系統要指定的埠號
* 3.使用DatagramSocket中的方法receive發送端接收數據報包
* 4.拆包
* DatagramPacket有和數據報包相關的方法
* int getLength() 獲取發送端數據的長度
* InetAddress getAddress() 獲取發送端的IP地址對象
* int getPort() 獲取發送端的埠號(系統隨機分配的)
* 5.釋放資源
1 public static void main(String[] args) throws IOException { 2 //1.創建DatagramPacket對象,接收發送端的數據報 3 byte[] bytes = new byte[1024];//數據最大傳輸64kb 1024*64 4 DatagramPacket dp = new DatagramPacket(bytes, bytes.length); 5 //2.創建DatagramSocket對象,並且和系統要指定的埠號 6 DatagramSocket ds = new DatagramSocket(8888); 7 //3.使用DatagramSocket中的方法receive發送端接收數據報包 8 ds.receive(dp); 9 //4.拆包 10 //int getLength() 獲取發送端數據的長度 11 int length = dp.getLength(); 12 //InetAddress getAddress() 獲取發送端的IP地址對象 13 String ip = dp.getAddress().getHostAddress(); 14 //int getPort() 獲取發送端的埠號(系統隨機分配的) 15 int port = dp.getPort(); 16 17 System.out.println(new String(bytes,0,length)+"ip:"+ip+",埠號"+port); 18 //5.釋放資源 19 ds.close(); 20 }
UDP通信的發送端:把數據進行包裝,根據接收端的IP地址和埠發送數據報包
*
* 和udp相關的類:
* java.net.DatagramPacket:此類表示數據報包。
* 作用:把數據和接收端的IP地址,埠號進行包裝
* java.net.DatagramSocket:此類表示用來發送和接收數據報包的套接字。
* 作用:發送數據報包,接收數據報包
* 套接字:綁定IP地址和埠號的網路對象
*
* 構造方法:
* DatagramPacket(byte[] buf, int length, InetAddress address, int port)
* 構造數據報包,用來將長度為 length 的包發送到指定主機上的指定埠號。
* DatagramSocket()
* 構造數據報套接字並將其綁定到本地主機上任何可用的埠。
*
* 成員方法:
* void send(DatagramPacket p) 從此套接字發送數據報包。
*
* 實現步驟:
* 1.創建DatagramPacket對象,封裝數據和接收端的IP地址,埠號(創建集裝箱)
* 2.創建DatagramSocket對象(創建碼頭)
* 3.使用DatagramSocket中的方法send發送數據報包
* 4.釋放資源
*
* UDP通信是面向無連接:不用管是否有接收端,都可以發送數據,沒有接收端會發生數據丟失
1 public static void main(String[] args) throws IOException { 2 //1.創建DatagramPacket對象,封裝數據和接收端的IP地址,埠號(創建集裝箱) 3 byte[] bytes = "你好UDP!".getBytes(); 4 InetAddress address = InetAddress.getByName("127.0.0.1"); 5 DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, 8888); 6 //2.創建DatagramSocket對象(創建碼頭) 7 DatagramSocket ds = new DatagramSocket(); 8 //3.使用DatagramSocket中的方法send發送數據報包 9 ds.send(dp); 10 //4.釋放資源 11 ds.close(); 12 }
TCP通信的客戶端:向伺服器發送請求連接,接收伺服器回寫的數據
*
* 表示客戶端的類:
* java.net.Socket:此類實現客戶端套接字(也可以就叫“套接字”)。
*
* 構造方法:
* Socket(InetAddress address, int port) 創建一個流套接字並將其連接到指定 IP 地址的指定埠號。
* Socket(String host, int port) 創建一個流套接字並將其連接到指定主機上的指定埠號。
*
* 成員方法:
* OutputStream getOutputStream() 返回此套接字的輸出流。
* InputStream getInputStream() 返回此套接字的輸入流。
*
* 註意:客戶端和伺服器進行數據交互,不能使用自己創建的流對象,必須使用Socket中提供的流
*
* 實現步驟:
* 1.創建客戶端Socket對象,綁定伺服器的IP地址和埠號
* 2.使用Socket中的方法getOutputStream獲取網路輸出流
* 3.使用OutputStream網路流中的方法write給伺服器發送數據
* 4.使用Socket中的方法getInputStream獲取網路輸入流
* 5.使用InputStream網路流中的方法read讀取伺服器回寫的數據
* 6.釋放資源
*
* 註意:TCP是面向連接通信,必須先啟動伺服器,在啟動客戶端,如果伺服器沒有啟動
* 則會拋出ConnectException: Connection refused: connect
1 public static void main(String[] args) throws IOException { 2 //1.創建客戶端Socket對象,綁定伺服器的IP地址和埠號 3 Socket socket = new Socket("127.0.0.1", 9999); 4 //2.使用Socket中的方法getOutputStream獲取網路輸出流 5 OutputStream os = socket.getOutputStream(); 6 //3.使用OutputStream網路流中的方法write給伺服器發送數據 7 os.write("你好伺服器".getBytes()); 8 //4.使用Socket中的方法getInputStream獲取網路輸入流 9 InputStream is = socket.getInputStream(); 10 //5.使用InputStream網路流中的方法read讀取伺服器回寫的數據 11 byte[] bytes = new byte[1024]; 12 int len = is.read(bytes); 13 System.out.println(new String(bytes,0,len)); 14 //6.釋放資源 15 socket.close(); 16 }
TCP通信的伺服器端:接收客戶端的發送的數據,給客戶端回寫數據
*
* 表示伺服器的類:
* java.net.ServerSocket:此類實現伺服器套接字。
*
* 構造方法:
* ServerSocket(int port) 創建綁定到特定埠的伺服器套接字。
*
* 有一件特別重要的事:伺服器必須的知道是哪個客戶端請求的伺服器
* 所有可以使用accept方法獲取請求的客戶端
* 成員方法:
* Socket accept() 偵聽並接受到此套接字的連接。
*
* 實現步驟:
* 1.創建ServerSocket對象,和系統要指定的埠號
* 2.使用ServerSocket中的方法accept獲取請求的客戶端對象
* 3.使用Socket中的方法getInputStream獲取網路輸入流
* 4.使用InputStream網路流中的方法read讀取客戶端發送的數據
* 5.使用Socket中的方法getOutputStream獲取網路輸出流
* 6.使用OutputStream網路流中的方法write給客戶端回寫數據
* 7.釋放資源(ServerSocket,Socket)
1 public static void main(String[] args) throws IOException { 2 //1.創建ServerSocket對象,和系統要指定的埠號 3 ServerSocket server = new ServerSocket(9999); 4 //2.使用ServerSocket中的方法accept獲取請求的客戶端對象 5 Socket socket = server.accept(); 6 //3.使用Socket中的方法getInputStream獲取網路輸入流 7 InputStream is = socket.getInputStream(); 8 byte[] bytes = new byte[1024]; 9 //4.使用InputStream網路流中的方法read讀取客戶端發送的數據 10 int len = is.read(bytes); 11 System.out.println(new String(bytes,0,len)); 12 //5.使用Socket中的方法getOutputStream獲取網路輸出流 13 OutputStream os = socket.getOutputStream(); 14 //6.使用OutputStream網路流中的方法write給客戶端回寫數據 15 os.write("收到".getBytes()); 16 //7.釋放資源(ServerSocket,Socket) 17 socket.close(); 18 server.close(); 19 }