創建服務端
import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class BIOServerSocket { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(8888); while (true){ //accpet是阻塞的 説明一下 服務端會持續監聽這個端口 等待處理客戶端請求 Socket socket= server.accept(); //開啓多個綫程,否則主綫程會阻塞無法處理其他客戶端請求 new ClientSocket(socket).start(); } } }
創建客戶端綫程
代碼很簡單就是獲取客戶端的IP和端口號 同時接受客戶端發送的數據(創建綫程也可以使用綫程池,方便對綫程進行管理,減少CPU資源的消耗)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; public class ClientSocket extends Thread { public Socket client = null; public ClientSocket(Socket client){ this.client = client; } @Override public void run() { System.out.println("From Client:"+ client.getInetAddress() + ":" + client.getPort() ); try { while (true) { BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream())); System.out.println("From Client : " + br.readLine()); } }catch(IOException e){ e.printStackTrace(); } } }
運行結構
啓動服務端可知accept()確實是阻塞的
啓動telnet客戶端
獲取客戶端發送的數據
下一篇博客使用NIO(非阻塞IO實現一下這個功能)