java網路程式設計(3)TCP
阿新 • • 發佈:2018-12-10
- 使用TCP進行網路資料傳輸的時候,TCP會在需要傳輸資料的兩端建立兩個Socket(插座),並且在兩個Socket之間建立一條虛擬鏈路,然後這兩臺主機就可以進行通訊了。
- 下面是一個很簡單的例子。
- Server類建立一個ServerSocket物件,用於監聽客戶端Socket的連結請求,這如果接受到請求的話,Server類就會建立一個Socket,並且將訊息打印出來。
- 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,發現程式打印出 “來自伺服器的資料: 啦啦啦~”