java基礎---TCP示例


TCP學習筆記-實現客戶端、服務端

需求:建立一個文本轉換服務客戶端給服務器發送文本,服務端將文本轉換成大寫在返回給客戶端。

而且客戶端可以不斷的進行文本轉換。當客戶端輸入over時,轉換結束

分析:

客戶端:既然是操作設備上的數據,那麼就可以使用io技術,並按照io的操作規律來思考。

源:鍵盤錄入目的:網絡設備,網絡輸出流。而且操作的是文本數據。可以選擇字符流。

步驟

1,建立服務。

2,獲取鍵盤錄入。

3,將數據發送給服務端。

4,服務端返回大寫數據。

5,結束,關閉資源。

都是文本數據,可以使用字符流進行操作,同時提高效率,加入緩衝。

import java.io.*;

import java.net.*;

//創建一個客戶端

class TransClient{

public static void main(String[] args) throws Exception{

  Socket s = new Socket("192.168.1.9",10005);

  //定義讀取鍵盤數據的流對象

  BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

  //定義目的,將數據寫入到socket輸出流。發送給服務端

  BufferedWriter bufout =new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

  //定義一個socket讀取流,讀取服務端返回的大寫信息。

  BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

  String line = null;while((line = bufr.readLine())!=null)

     {

      if("over".equals(line))

          break;bufout.write(line);

          //刷新緩衝區的數據

          bufout.newLine();bufout.flush();

          String str = bufIn.readLine();

          System.out.println("server"+str);

       }

      bufr.close();s.close();

   }

}

源:socket讀取流

目的:socket輸入流

都是文本,裝飾。

//服務端:

class TransServer{

  public static void main(String [] args) throws Exception{

    ServerSocket ss = new ServerSocket(10005);

    Socket s = ss.accept();

    String ip = s.getInetAddress().getHostAddress();

    System.out.println(ip+"....connected");

    //讀取socket 讀取流中的數據源

    BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

    PrintWriter out = new PrintWriter(s.getOutputStream(),true);

    //目的 socket輸出流,將大寫數據寫入到socket輸出流,併發送給客戶端

    BufferedWriter bufout =new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

    String line = null;

    //需要讀到回車符,讀到就把數據刷新出來

    //阻塞式方法

    while((line = bufIn.readLine())!=null){

        System.out.println(line);

        bufout.write(line.toUpperCase());

        bufout.newLine();bufout.flush();

        //三句變一句

        //out.println(line);

  }

      s.close();ss.close();

 }

}

/*該例子出現的問題現象:客戶端和服務端都在等待原因:因爲客戶端和服務端都有阻塞式方法。這些方法沒有讀到結束標記,那麼一直等.而導致兩端,都在等*/

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