Java实现一个简易HTTP服务器 (二) -- 多线程

Java实现一个简易HTTP服务器 (二) -- 多线程

运行方法:新建项目后在目录下创建index.html.

favicon为可选项,作为网站图标

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(80);
        System.out.println("Server started at " + new Date() + "
");
        try {
            while (true) {
                // 通信socket的获得
                Socket socket = serverSocket.accept();
                new Thread(new Handler(socket)).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
            serverSocket.close();
        }
    }
}
public class Handler implements Runnable {

	public Socket socket;
	public static int BUFFERSIZE = 2048;

	public Handler(Socket socket) {
		this.socket = socket;
	}

	public void run() {
		try {
			InputStream in = socket.getInputStream();
			OutputStream out = socket.getOutputStream();
			byte[] buf = new byte[BUFFERSIZE];

			// 读取数据
			int len = in.read(buf);
			String s = new String(buf, 0, len);
			Request request = new Request(s);
			Logger logger = new Logger(System.out);
			logger.writelog(request.toString()+"
");
			
			//返回数据
			String path = request.path;
			if (path.equals("/"))
				path = "index.html";
			if (path.equals("/favicon.ico"))
				path = "favicon.ico";
			File file = new File(path);
			InputStream fin = new FileInputStream(file);
			out.write(("HTTP/1.1 200 OK
" + "Content-Type: text/html" + "

").getBytes());
			while ((len = fin.read(buf)) > 0)
				out.write(buf, 0, len);

			// 关闭连接
			socket.close();
			fin.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}
原文地址:https://www.cnblogs.com/cdbb/p/12558120.html