自己实现HTTP服务器 - Go语言中文社区

自己实现HTTP服务器


序言

在做移动互联网开发的时候,HTTP协议是我们经常使用的协议。但是很多人都在用各种框架而不能连接HTTP协议的实质,其实HTTP协议就是建立在TCP协议上的一种应用层协议。而在java中要实现TCP通信,必不可少的就是Socket。包括我们经常使用的框架,比如OKHttp,内部使用的就是OKIO,而OKIO不过是对Socket通信的一种封装而已。下面我就用29行代码实现一个HTTP服务器,这个服务器只能接受一次访问,返回一条语句但是,已经能说明问题。

源码

HttpServer

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        Socket client = serverSocket.accept();
        System.out.println("链接成功");
        StringBuffer sb = new StringBuffer();
        String outHtml = "<html><b1>欢迎来到我的世界</b1></html>";
        OutputStream ops = client.getOutputStream();
        sb.append("HTTP/1.1 200 OKrn");//HTTP头,200表示请求成功,/r/n是每行的分隔符必须有
        int length = outHtml.getBytes("utf-8").length;
        sb.append("Content-Length:" + length + "rn");//计算Content的长度,单位字节
        sb.append("rn");//空行,必不可少的分隔,用来将HTTP头和Body区分.
        sb.append(outHtml);//真正的内容,一般为网页的源代码
        byte[] data = sb.toString().getBytes("utf-8");
        ops.write(data);
        ops.flush();
        ops.close();
        client.close();
        serverSocket.close();
    }
}

抓包

这里写图片描述

运行效果

用浏览器访问 http://www.localhost:8888

这里写图片描述

总结

我认为大家有时间都可以自己尝试一下,通过自己实现HTTP协议,就能对服务器和客户端交互有更深刻的理解。这样在分析问题的时候思路就能更清晰,我只要知道浏览器通过TCP链接收到符合HTTP协议的内容就可以显示正确的内容,无论这个链接是通过什么设备发起的,无论是通过什么语言实现的。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_22706515/article/details/73647661
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 03:24:31
  • 阅读 ( 837 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢