自己实现HTTP服务器

xiaoxiao2021-02-28  8

序言

在做移动互联网开发的时候,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 OK\r\n");//HTTP头,200表示请求成功,/r/n是每行的分隔符必须有 int length = outHtml.getBytes("utf-8").length; sb.append("Content-Length:" + length + "\r\n");//计算Content的长度,单位字节 sb.append("\r\n");//空行,必不可少的分隔,用来将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协议的内容就可以显示正确的内容,无论这个链接是通过什么设备发起的,无论是通过什么语言实现的。

转载请注明原文地址: https://www.6miu.com/read-630233.html

最新回复(0)