服务器和客服端
C-S模型启动相应过程
用户的浏览器(socket客户端)
3、客户端往服务端发消息
6. 客户端接收消息
服务器(socket服务端)
1、启动、监听端口
2、等待客户端连接
4. 服务端收消息
5. 服务端回消息
7. 关闭
由于浏览器部分不用我们完成,所以我们主要完成服务器部分代码(python实现服务器代码)
# encoding: utf-8
import socket
# 创建 scoket 对象
sk = socket.socket()
# 绑定ip和端口
sk.bind(("127.0.0.1",8000))
# 监听
sk.listen(10)
# 写一个死循环,一直等待客户端来连我
while 1:
# 获取与客户端的连接
conn , _ = sk.accept()
# 接收客户端发来消息
data = conn.recv(8096)
# 给客户端回复消息
conn.send(b'qnmd')
conn.close()
sk.close()
但是在浏览器中输入 127.0.0.1:8000 访问错误
加入print data
,在终端的输出
GET / HTTP/1.1
Host: 127.0.0.1:8000
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: csrftoken=IRpdhcu9JL6A9Qdm4Zz007ndWLfipXjbffLoXeW0mtpuCIyG7UVHYq0iFhFG2dMe
主要原因:浏览器和服务端通信都要遵循一个HTTP协议(消息的格式要求)
所以HTTP协议主要内容为:
1. 浏览器往服务端发的叫 请求(request)
请求的消息格式:
请求方法 路径 HTTP/1.1\r\n
k1:v1\r\n
k2:v2\r\n
\r\n
请求数据
2. 服务端往浏览器发的叫 响应(response)
响应的消息格式:
HTTP/1.1 状态码 状态描述符\r\n
k1:v1\r\n
k2:v2\r\n
\r\n
响应正文 <-- html的内容
为了遵循HTTP协议,我们在头部加入
# 给客户端回复消息
conn.send(b'http/1.1 200 ok\r\n\r\n')
就可以在页面打印数据了!