如何建立自己的简易httpserver服务器

做为java文本开发人员对开发web应用并不陌生,那么有人去研究过我们使用的http中间件服务器tomat是用用什么原理开发的呢?

我们能不能自己开发一个tcp服务器呢,答案时可以的:

我们简要分析下http服务器需要哪些东西:

1、能够开端口接收请求

2、能够获取请求的url和参数

3、处理请求参数内容

4、输出请求的结构

5、处理大并发里面的请求

这里我们用sun公司的com.sun.net.httpserver.HttpServer类实现以上功能

1、开端口接收请求

       HttpServer httpServer = HttpServer.create(new InetSocketAddress(8088), 0);

2、获取请求url和参数

httpExchange.getRequestURI().getPath();

String paramStr = "";

        if (httpExchange.getRequestMethod().equals("GET")) {
            // GET请求参数
            paramStr = httpExchange.getRequestURI().getQuery();
        } else {
            // POST请求参数
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(httpExchange.getRequestBody(),
                            "utf-8"));
            StringBuilder requestBodyContent = new StringBuilder();
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                requestBodyContent.append(line);
            }
            paramStr = requestBodyContent.toString();
        }

        return paramStr;

3、获取请求参数内容和输出文本,这里以读取文件为例:

    OutputStream out = null;
        FileInputStream in = null;
        File file = new File(filePath);
        in = new FileInputStream(fileDir + filePath);
        httpExchange.getResponseHeaders().add("Content-Type:",
                "text/html;charset=utf-8");
          httpExchange.sendResponseHeaders(200,file.length());
        out = httpExchange.getResponseBody();
        int len = 0;
        byte[] buffer = new byte[1024];
        while ((len = in.read(buffer)) > 0) {
            out.write(buffer, 0, len);
        }
        out.flush();
        out.close();

5、并发,后续文章再处理

详细代码见github

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现一个简易HTTP服务器,可以按照以下步骤进行: 1. 创建Socket并绑定端口:使用socket函数创建一个套接字,并使用bind函数将其绑定到指定的端口。 2. 监听连接请求:使用listen函数监听来自客户端的连接请求。 3. 接受连接请求:使用accept函数接受连接请求,并返回一个新的套接字用于与客户端通信。 4. 接收请求并解析:使用recv函数接收客户端发送的请求数据,并解析出请求方法、请求路径、请求头等信息。 5. 处理请求:根据请求方法和请求路径,处理客户端的请求并返回相应的内容。 6. 发送响应:使用send函数将响应数据发送给客户端。 7. 关闭连接:使用close函数关闭与客户端的连接。 以下是一个简单的HTTP服务器示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #define PORT 8080 #define BUFFER_SIZE 1024 void handle_request(int client_socket) { char buffer[BUFFER_SIZE]; char response[] = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello, World!</h1>"; recv(client_socket, buffer, BUFFER_SIZE, 0); send(client_socket, response, strlen(response), 0); close(client_socket); } int main() { int server_socket, client_socket; struct sockaddr_in server_addr, client_addr; int addr_len = sizeof(client_addr); // 创建Socket并绑定端口 server_socket = socket(AF_INET, SOCK_STREAM, 0); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(PORT); bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)); // 监听连接请求 listen(server_socket, 5); while (1) { // 接受连接请求 client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &addr_len); // 处理请求 handle_request(client_socket); } // 关闭Socket close(server_socket); return 0; } ``` 这段代码实现了一个简单的HTTP服务器,它会返回一个固定的HTML页面作为响应。你可以根据需要修改 handle_request 函数来处理不同的请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值