java網絡編程下

發送端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/*
流程:
 1. 創建UDP服務器對應的發送端Socket
 2. 準備對應數據包,需要帶有指定數據
 3. 發送數據 send
 4. 關閉UDP發送端
 */

public class SenderDemo1 {
 public static void main(String[] args) throws IOException {
  System.out.println("發送端啓動");
  // 創建對應的Socket
  DatagramSocket socket = new DatagramSocket();
  // 準備數據包
  byte[] bytes = "今天中午喫蒸羊羔...".getBytes();
  DatagramPacket packet = new DatagramPacket(bytes,  // 字節數組數據
  bytes.length,  // 字節數組數據長度
    InetAddress.getLocalHost(),  // 指定接收端IP地址
    8848); // 8848對應端口號
      // 發送數據包
  socket.send(packet);
  
  // 關閉UDP發送端
  socket.close();
 }
}
接收端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/*
流程:
 1. 打開UDP服務,並且監聽指定端口
 2. 創建新的空數據包
 3. 通過Socket接收數據 receive
 4. 關閉UDP服務接收端
 */
public class ReceiveDemo1 {
 public static void main(String[] args) throws IOException {
  // 創建Socket監聽端口
    DatagramSocket socket = new DatagramSocket(8848);
  
  // 準備空數據包
  byte[] buf = new byte[1024];
    DatagramPacket packet = new DatagramPacket(buf, buf.length);
  
  // 接收數據
  socket.receive(packet);
  
  // 確定接收到的字節長度
    int length = packet.getLength();
  
  System.out.println(new String(buf, 0, length));
  
  // 關閉socket
  socket.close();
  
 }
}
UDP數據傳遞丟失問題
  1. 網絡不夠好,穩定性不行,帶寬不夠
  2. 電腦性能不好

2. TCP

2.1 TCP概述

TCP相對於UDP比較穩定的傳輸協議,這裏存在三次握手,保證連接狀態,同時有明確的客戶端和服務端之分
TCP服務中需要服務器端先啓動,需要監聽指定端口,等待客戶端連接。
客戶端主動連接服務器,和服務器連接之後,纔可以進行數據交互,服務器不能主動連接客戶端的。
TCP操作而言,Java中提供了兩個Socket

  1. 服務端Socket
    java.net.ServerSocket;
    創建對應的ServerScoket開啓服務器,等待客戶端連接。
  2. 客戶端Socket
    java.net.Socket
    創建客戶端Scoket,並且連接服務器,同時將Socket發送給服務器綁定註冊。

在這裏插入圖片描述

2.2 Socket 客戶端Socket

構造方法 Constructor
 Socket(String host, int port);
 host是服務器IP地址,port對應服務器程序的端口號
  通過指定的服務器IP地址和端口號,獲取TCP連接對象

成員方法 Method
 InputStream getInputStream();
 獲取Socket對象輸入字節流,可以從服務器獲取對應的數據
  InputStream是一個資源,需要在程序退出是關閉
  Read
 
  OutputStream getOutputStream();
  獲取Sokcet對象輸出字節流,可以發送數據到服務器
 OutputStream是一個資源,需要在程序退出是關閉
  Write
  void close();
  關閉客戶端Socket
 
  void shutdownOutput();
  禁止當前Socket發送數據

TCP/IP協議對應的Socket是給予IO流實現的

2.3 ServerSocket服務端Socket

在服務端開啓Socket服務器
構造方法 Constructor:
 ServerSocket(int port);
 開啓ServerSocket服務器,並且明確當前服務端口是誰

成員方法 Method:
  Socket accept();
   監聽並且連接,得到一個Socket對象,同時該方法是一個阻塞方法,會處於一個始終的監聽狀態
   返回的是Socket,也就是客戶端Socket對象,獲取到當前Socket對象,相對於獲取到客戶端連接,同時使用的Socket和客戶端一致。
   在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章