JAVA網絡編程之TCP傳輸

一、多線程網絡編程(TCP協議)

1.客戶端

  • 創建Socket連接服務端(指定ip地址,端口號)通過ip地址找對應的服務器
  • 調用Socket的getInputStream()和getOutputStream()方法獲取和服務端相連的IO流
  • 輸入流可以讀取服務端輸出流寫出的數據
  • 輸出流可以寫出數據到服務端的輸入流
public static void main(String[] args) throws UnknownHostException, IOException {
   Socket socket = new Socket("127.0.0.1", 12345);
   //將字節流包裝成了字符流
   BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));       
   //PrintStream中有寫出換行的方法
   PrintStream ps = new PrintStream(socket.getOutputStream());                
   
   System.out.println(br.readLine());
   ps.println("你好");
   System.out.println(br.readLine());
   ps.println("大家好");
   
   socket.close();
}

 注:

  • 此處不適用BufferedWriter的原因:BufferedReader中readLine()方法以讀入換行符(\r\n)爲結束標誌,而PrintStream中的println()方法比BufferedWriter中newLine()方法更加方便,所以此處推薦使用PrintStream。
  • PrintStream必須使用println()輸出,如果使用print()方法可能導致死鎖。

2.服務器 

  • 創建ServerSocket(需要指定端口號)
  • 調用ServerSocket的accept()方法接收一個客戶端請求,得到一個Socket
  • 調用Socket的getInputStream()和getOutputStream()方法獲取和客戶端相連的IO流
  • 輸入流可以讀取客戶端輸出流寫出的數據
  • 輸出流可以寫出數據到客戶端的輸入流
public static void main(String[] args) throws IOException {
   ServerSocket server = new ServerSocket(12345);
   
   while(true) {
      final Socket socket = server.accept();                //接受客戶端的請求
      new Thread() {
         public void run() {
            try {
               BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));       //將字節流包裝成了字符流
               PrintStream ps = new PrintStream(socket.getOutputStream());                //PrintStream中有寫出換行的方法
               
               ps.println("你好");
               System.out.println(br.readLine());
               ps.println("再見");
               System.out.println(br.readLine());
               socket.close();
            } catch (IOException e) {
               
               e.printStackTrace();
            }
         }
      }.start();
   }
}

 

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