简单服务器开发(五)多线程服务器
处理客户端请求:
package com.zda.httpserver.core; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import com.zda.httpserver.util.Logger; /** * 处理客户端请求 * @author zda * @version 1.0 * @since 1.0 */ public class HandlerRequest implements Runnable { public Socket clientSocket; public HandlerRequest(Socket clientSocket){ this.clientSocket = clientSocket; } @Override public void run() { //处理客户端请求 BufferedReader br = null; Logger.log("httpserver thread: " + Thread.currentThread().getName()); try { //接收客户端消息 br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); //打印客户端消息 String temp = null; while((temp = br.readLine()) != null){ System.out.println(temp); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //关闭资源 if(br != null){ try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(clientSocket != null){ try { clientSocket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
主入口
package com.zda.httpserver.core; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import com.zda.httpserver.util.Logger; /** * httpserver主入口 * @author zda * @version 1.0 * @since 1.0 * */ public class BootStrap { public static void main(String[] args) { // 程序入口 start(); } /** * 主程序入口 */ public static void start() { ServerSocket serverSocket = null; Socket clientSocket = null; BufferedReader br = null; try { Logger.log("httpserver start"); //获取当前时间 long start = System.currentTimeMillis(); //获取系统端口号 int port = ServerParser.getPort(); Logger.log("httpserver-port: " + port); //创建服务器套接字,并且绑定端口号:8080 serverSocket = new ServerSocket(port); //获取结束时间 long end = System.currentTimeMillis(); Logger.log("httpserver started: " + (end-start) + " ms"); while(true){ //开始监听网络,此时程序处于等待状态,等待接收客户端的消息 clientSocket = serverSocket.accept(); /*//接收客户端消息 br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String temp = null; while((temp = br.readLine()) != null){ System.out.println(temp); }*/ new Thread(new HandlerRequest(clientSocket)).start(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //关闭资源 /*if(br != null){ try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(clientSocket != null){ try { clientSocket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }*/ if(serverSocket != null){ try { serverSocket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }