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