0
点赞
收藏
分享

微信扫一扫

【计算机网络-9】Socket编程HTTP服务

泠之屋 2022-05-05 阅读 56

一、目标 - 实现HTTP服务

  • 不用框架利用Socket编程实现一个HTTP服务框架
  • 实现基本的Request/Response封装
  • 思考IO和线程模型之间的关系

二、网络插槽Socket

三、线程模型

四、NIO+Socket编程

五、简单的Http服务

1、RawHttpServer源码

/**
 * @description: RawHttpServer
 * @author: flygo
 * @time: 2022/4/27 22:20
 */
public class RawHttpServer {

    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8001);

        // Main thread
        while (true) {
            // Blocking...
            // Thread ---> Sleep ---> Other Threads
            var socket = serverSocket.accept();
            System.out.println("A socket created");

            var iptStream = new DataInputStream(socket.getInputStream());
            var bfReader = new BufferedReader(new InputStreamReader(iptStream));

            var requestBuilder = new StringBuilder();

            String line = "";

            // ReadLine -> line end "\n"
            while (!(line = bfReader.readLine()).isBlank()) {
                requestBuilder.append(line + "\n");
            }

            var request = requestBuilder.toString();
            System.out.println(request);

            var bfWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            bfWriter.write("HTTP/1.1 200 ok\n\nHello Word\n");
            bfWriter.flush();;
            bfWriter.close();
        }
    }
}

2、通过curl 访问该HttpServer

$ curl http://localhost:8001

 

举报

相关推荐

0 条评论