package io; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; /** * Created by dingshuangkun on 2017/12/30. */ public class Server { private static int count = 1; public static void main(String[] arges) throws Exception { ServerSocket ss = new ServerSocket(8080); System.out.println("服務器啓動"); while (true) { // 阻塞 final Socket socket = ss.accept(); System.out.println("新建客戶端" + count); count++; handler(socket); } } public static void handler(Socket socket) { try { byte[] b = new byte[1024]; InputStream inputStream = socket.getInputStream(); while (true) { // 阻塞 int read = inputStream.read(b); if (read != -1) { System.out.println(new String(b,0,read)); }else { break; } } } catch (IOException e) { e.printStackTrace(); }finally { System.out.println("socket 關閉"); try { socket.close(); }catch (IOException e){ e.printStackTrace(); } } } }
下面在瀏覽器中訪問java
在瀏覽器中開啓了3個窗口 訪問服務瀏覽器
結果是隻有一個窗口訪問到而且輸出結果。其它窗口被阻塞服務器
第一個窗口被阻塞在這裏,致使其它線程被阻塞在這裏socket
缺點很明顯,單線程狀況下只能有一個客戶端。一個線程管理一個鏈接.net