1.普通Socket的用法

Java中網絡通信是通過Socket實現的。
Socket分為ServerSocket和Socket兩大類。
ServerSocket用于服務端,通過accept方法監聽請求,監聽到請求后返回Socket,Socket用于具體完成數據傳輸;客戶端通過Socket直接發起請求并傳輸數據。

ServerSocket的使用方法:
  1. 創建ServerSocket。ServerSocket有5個構造方法,其中ServerSocket(int port)用起來最方便,只需一個端口號就可以了。
  2. 調用accept方法進行監聽。accept方法是阻塞方法,即調用accept方法后程序會停下來等待請求,在接收到請求之前,程序不會往下走,當接收到請求后accept方法會返回一個Socket.
  3. 使用accept返回的Socket進行通信。
ServerSocket的簡單示例:
package Ex;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TestServer {
  public static void main(String[] args) {
    try {
        // 1.創建一個ServerSocket監聽8080端口
        ServerSocket server = new ServerSocket(8080);
        // 2.等待請求
        Socket socket = server.accept();
        // 3.接收到請求后使用socket進行通信,創建BufferedReader用于讀取數據
        BufferedReader is = new BufferedReader(new InputStreamReader(
                socket.getInputStream()));
        String line = is.readLine();
        System.out.println("received from client: " + line);
        // 創建PrintWriter,用于發送數據
        PrintWriter pw = new PrintWriter(socket.getOutputStream());
        pw.println("received data :" + line);
        pw.flush();
        // 關閉資源
        pw.close();
        is.close();
        socket.close();
        server.close();
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
  }
}

在上面的TestServer中,先創建ServerSocket,然后調用accpet等待請求,當接收到請求后,用返回的Socket創建BufferedReader和PrintWriter進行接收和發送數據,Reader接收到的數據保存到line中,在控制臺打印,Writer發送數據給客戶端。數據傳輸完成后,關閉連接;

Socket的簡單示例:
package Ex;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class TestClient {
  public static void main(String[] args) {
    String msg = "Client Data.";
    try {
        //創建一個Socket,跟本機的8080端口連接
        Socket socket = new Socket("127.0.0.1",8080);
        //使用Socket創建PrintWriter和BufferedReader進行讀寫數據
        PrintWriter pw = new PrintWriter(socket.getOutputStream());
        //讀取數據
        BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        //發送數據
        pw.println(msg);
        pw.flush();
        //接收數據
        String line = is.readLine();
        System.out.println("received from server :"+line);
        //關閉資源
        is.close();
        pw.close();
        socket.close();
        
        
    } catch (Exception e) {
        // TODO: handle exception
    }
  }
}

首先創建一個Socket,采用Socket(String host,int port)構造方法,把主機地址和端口號傳入進去,Socket就會跟服務端建立連接,創建完Socket,再創建Reader和Writer進行數據傳輸,數據傳輸完成后,關閉連接釋放資源即可。
??先啟動TestServer,然后再啟動TestClient就可以完成一次通信。Server端控制臺輸出:received from client:Client Date;Client端控制臺輸出:received from server:received data:Client data;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1 網絡編程----TCPNo24 【 public class Server { public static...
    征程_Journey閱讀 1,282評論 0 4
  • 愛情的難題 沒有公式 沒有定律 千百人千百樣 我們都更像一顆棋 深陷迷局 唯有做好自己 不至于被情困 被心迷 有天...
    獅女柔心_Nicole陶閱讀 127評論 0 1
  • 大二了,時間過得好快。 以前中學的時候學別人故作老態,感慨時光飛逝。到現在不知不覺大二了,回憶以前走的路,發生的事...
    騶虞閱讀 350評論 0 2
  • 日常生活中,一提到顏色提到顏色,更多的是對顏色的感覺。比如,紅色代表熱情,奔放。藍色代表憂郁深沉。每一種顏色會在心...
    影子倒了閱讀 5,762評論 1 7
  • 3.開始找證據 弗蘭克走向了那處荒涼的遺址處,開始了尋找證據,不過這都有十年之久,還怎么找呢?這恐怕是他心里最大的...
    沙塢閱讀 249評論 0 2