1. 程式人生 > >java網路程式設計(3)TCP

java網路程式設計(3)TCP

  1. 使用TCP進行網路資料傳輸的時候,TCP會在需要傳輸資料的兩端建立兩個Socket(插座),並且在兩個Socket之間建立一條虛擬鏈路,然後這兩臺主機就可以進行通訊了。
  2. 下面是一個很簡單的例子。
    1. Server類建立一個ServerSocket物件,用於監聽客戶端Socket的連結請求,這如果接受到請求的話,Server類就會建立一個Socket,並且將訊息打印出來。
    2. Client類像伺服器傳送請求並且將資料列印
      import java.io.IOException;
      import java.io.PrintStream;
      import java.net.ServerSocket;
      import java.net.Socket;
      
      public class Server {
      public static void main(String args[]) throws IOException {
          
          ServerSocket ss = new ServerSocket(30000);
      //    建立一個ServerSocket物件,並且保持監聽,一旦得到請求,就執行while裡的操作
          
          while (true){
              Socket socket = ss.accept();
      //        建立一個Socket物件,通過ServerSocket的accept(),accept方法是如果接受到一個客戶端
      //        的連結請求,就返回一個與客戶端Socket對應的Socket
              
              PrintStream ps = new  PrintStream(socket.getOutputStream());
      //        將socket的輸出流包裝成PrintStream物件
              
              ps.println("啦啦啦~");
              
              ps.close();
              socket.close();
          }
          }
      }
      
      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
      import java.net.Socket;
      
      public class Client {
          public static void main(String args[]) throws IOException{
      
              Socket socket = new Socket("127.0.0.1", 30000);
      //        建立一個Socket物件並且傳送請求
      
              BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream()));
      //        讀取資料,並且將資料包裝成BufferedReader
      
              String line = br.readLine();
              System.out.println("來自伺服器的資料: " +line);
              br.close();
              socket.close();
          }
      }
      

      先執行Service,發現程式發生阻塞,因為它在等待客戶端的請求,在執行Client,發現程式打印出 “來自伺服器的資料: 啦啦啦~”