序言
在做移动互联网开发的时候,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")
int length = outHtml
.getBytes(
"utf-8")
.length
sb
.append(
"Content-Length:" + length +
"\r\n")
sb
.append(
"\r\n")
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协议的内容就可以显示正确的内容,无论这个链接是通过什么设备发起的,无论是通过什么语言实现的。