搭建虚拟服务器环境、服务器开线程响应请求
搭建虚拟服务器环境
代码案例:
public class MyHttpServer { private static int count = 1; public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(8080); System.out.println("服务器已经启动,监听端口在8080..."); while (true){ Socket socket = server.accept(); InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); byte[] buf = new byte[1024*1024]; int len = is.read(buf); System.out.println("读到的字节数量是:"+len); String s = new String(buf,0,len); System.out.println(s); // HTTP1.1协议 状态码200 正确 回车换行 os.write("HTTP/1.1 200 OK\r\n".getBytes()); // 内容的类型是普通文本,回车换行 os.write("Content-Type:text/plain\r\n".getBytes()); // 回车换行 os.write("\r\n".getBytes()); // 返回浏览器的文本内容 os.write((""+count).getBytes()); count++; // 主动刷新一次 os.flush(); // 关闭资源 socket.close(); } } }
运行结果:
两次运行结果
服务器开线程响应请求
代码案例:
public class MyHttpServer { private static int count = 1; public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(8080); System.out.println("服务器已经启动,监听端口在8080..."); while (true){ Socket socket = server.accept(); InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); byte[] buf = new byte[1024*1024]; new Thread(new Runnable() { @Override public void run() { int len = 0; try { len = is.read(buf); if (len == -1) return; System.out.println("读到的字节数量是:"+len); String s = new String(buf,0,len); System.out.println(s); // HTTP1.1协议 状态码200 正确 回车换行 os.write("HTTP/1.1 200 OK\r\n".getBytes()); // 内容的类型是普通文本,回车换行 os.write("Content-Type:text/plain\r\n".getBytes()); // 回车换行 os.write("\r\n".getBytes()); // 返回浏览器的文本内容 os.write((""+count).getBytes()); count++; // 主动刷新一次 os.flush(); } catch (IOException e) { e.printStackTrace(); }finally { if (socket != null){ try { // 关闭资源 socket.close(); }catch (IOException e){ e.printStackTrace(); } } } } }); } } }