創建服務端
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實現一下這個功能)