zoukankan      html  css  js  c++  java
  • 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();
    		}
    
    	}
    
    }
    
  • 相关阅读:
    C struct的内存对齐
    C++ 继承、函数重载
    C++ 操作符重载
    C中入栈顺序和运算顺序有关系吗?
    Java 关于finally、static
    C++ 类的复制控制
    Linux中vi的使用
    C++ 类的头文件、实现、使用
    (web)个人项目(挖宝网)
    MariaDB使用enum和set
  • 原文地址:https://www.cnblogs.com/cdbb/p/12558120.html
Copyright © 2011-2022 走看看