摘要
使用python 基于tcp协议开发一个简易的http web服务器
前置知识
这些都是一些基础知识,论坛里面都有写的很好的教程。
- tcp协议
- socket
运行截图
代码
import socket
def http_service():
"""基于tcp的http web服务器"""
# 创建tcp套接字, 第一个参数是使用ipv4还是ipv6,第二个参数是使用tcp协议还是udp协议
tcp_socket_service = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定监听的ip 127.0.0.1 和端口号 8080
bind = ("127.0.0.1", 8080)
tcp_socket_service.bind(bind)
print("服务器:%s......" % str(bind))
# 将套接字转主动为监听
tcp_socket_service.listen(128)
# 循环为新客户端服务
while True:
# 等待客户端(浏览器)的连接,阻塞。有连接后,返回新的套接字对象(标记客户端的)和客户端信息(ip和端口号)
client_socket, client_addr = tcp_socket_service.accept()
# 打印连接信息
client_ip = client_addr[0]
client_port = client_addr[1]
print("===>{}:{} 发来了请求".format(client_ip, client_port))
# 交给响应函数处理
response_handler(client_socket)
def response_handler(client_socket):
"""处理请求并响应"""
# 等待客户端(浏览器)发送数据(请求),阻塞。现在用不到客户端发送的数据,所以不用变量来接收返回值
client_socket.recv(1024)
# 生成响应头(最简易)
response_headers = "HTTP/1.1 200 OK\r\ncontent-type: text/html; charset=utf-8\r\n"
# 生成响应体,返回html的h1标签,浏览器会渲染
response_body = "<h1>这是一个web服务器<h1>"
# 拼接响应, \r\n到浏览器中才会被识别为一个换行,(换行用来间隔响应头和响应体)
response = response_headers + "\r\n" + response_body
# 响应数据
client_socket.send(response.encode("utf-8"))
# 关闭与客户端的套接字连接
client_socket.close()
def main():
# 调用函数,开启服务器
http_service()
if __name__ == "__main__":
main()
建了一个python交流群,要是大家有疑问或者想交流的,欢迎进群交流,QQ群号码:891938703