2 socket模块


socket模块

HTTP协议
    1.四大特性
        1.基于请求响应
        2.基于TCP/IP作用于应用层之上的协议(OSI七层)
        3.无状态
        4.无连接/短连接
            长链接 websocket
    2.数据格式
        请求格式
            请求头(请求方法)
            请求首行(一大堆kv键值对)
            
            请求体(并不是所有的请求都有 携带一些敏感数据)
        响应格式
    3.响应状态码(更多自定义响应状态码见网站聚合数据)
        用数字来表示一堆中文意思
        1XX
        2XX  200
        3XX  302 304
        4XX  403 404
        5XX  500
        在公司中还会自定义更多的状态码
            一般都是以10000起步
      

服务端

import socket

"""
1.必须要有固定的IP和PORT
2.必须能够24小时不间断提供服务
3.能够支持高并发
"""
# 1.创建socket对象
server = socket.socket()
# 2.绑定IP和PORT
server.bind(('127.0.0.1', 8080))
# 3.监听
server.listen(5)

# 链接循环
while True:
    conn, addr = server.accept()
    # 接收客户端数据
    data = conn.recv(1024)
    # 将data转换成字符串
    # 回复HTTP响应格式
    conn.send(b'HTTP/1.1 200 OK\r\n\r\n')

    new_data = data.decode('utf8')
    res = new_data.split(' ')[1]
    if res == '/index':
        conn.send(b'index')
    # 回复客户端消息
    conn.send(b'how are you?')

"""
b'GET / HTTP/1.1\r\n  请求头
Host: 127.0.0.1:8080\r\n  一堆KV键值对
Connection: keep-alive\r\n
sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"\r\n
sec-ch-ua-mobile: ?0\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
Sec-Fetch-Site: none\r\n
Sec-Fetch-Mode: navigate\r\n
Sec-Fetch-User: ?1\r\n
Sec-Fetch-Dest: document\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
Cookie: csrftoken=8EqjbfAEKVeFfdsCzPdBjHHotyBJfuagqFy3rtUjhmXCBArcEB1e3E0MaX1sdFA0\r\n
\r\n'  换行
GET请求没有请求体
"""

客户端

import socket


client = socket.socket()
client.connect(('127.0.0.1',8080))

while True:
    client.send(b'who you are?')
    res = client.recv(1024)
    print(res)