python 创建简单web服务器笔记

Python创建简单web服务器


  • 步骤:

创建TCP服务端
1、导入套接字模块(socket)
2、创建套接字
3、设置地址重用
4、绑定端口
5、设置监听,让套接字由主动变为被动接收
6、接受客户端连接 定义函数 request_handler()
7、接收客户端浏览器发送的请求协议
8、判断协议是否为空
9、拼接响应的报文
10、发送响应报文
11、关闭操作

  • 运行python web服务器 浏览器进行访问(我设置的端口号为8081)
    即可展现如下图的hello world
    在这里插入图片描述

定义主函数main()

1、导入套接字模块(socket)

2、创建套接字

import socket

# 参数
# socket.AF_INET     --- IPV4
# socket.SOCK_STREAM     --- tcp
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

3、设置地址重用

#                             当前套接字            地址重用         值True
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

4、绑定端口

5、设置监听,让套接字由主动变为被动接收

tcp_server_socket.bind(("", 8081))
tcp_server_socket.listen(128)

6、接受客户端连接 定义函数 request_handler()

7、接收客户端浏览器发送的请求协议

8、判断协议是否为空

9、拼接响应的报文

10、发送响应报文

request_handler()即为接收客户端(浏览器)的发出的请求并作出相应

def request_handler(new_client_socket, ip_port):
    """接收信息,并且做出响应"""
    # 7、接收客户端浏览器发送的请求协议
    request_data = new_client_socket.recv(1024)
    # print(request_data)
    # 8、判断协议是否为空
    if not request_data:
        print("%s客户端已经下线!" % str(ip_port))
        new_client_socket.close()
        return

    # 拼接响应的报文
    #   1-- 响应行
    response_line = "HTTP/1.1 200 OK\r\n"
    #   2-- 响应头
    response_header = "Server:Python20WS/2.1\r\n"
    #   3-- 响应空行
    response_blank = "\r\n"
    #   4-- 响应的主体
    response_body = "HelloWorld!"

    response_data = response_line + response_header + response_blank + response_body
    # 10、发送响应报文
    new_client_socket.send(response_data.encode())

    # 11、关闭当前连接
    new_client_socket.close()

  • 完整代码如下

import socket


def request_handler(new_client_socket, ip_port):
    """接收信息,并且做出响应"""
    request_data = new_client_socket.recv(1024)
    if not request_data:
        print("%s客户端已经下线!" % str(ip_port))
        new_client_socket.close()
        return
    # 响应报文
	response_line = "HTTP/1.1 200 OK\r\n"
    response_header = "Server:Python20WS/2.1\r\n"
	response_blank = "\r\n"
    response_body = "HelloWorld!"
    response_data = response_line + response_header + response_blank + response_body
    # 发送响应报文
    new_client_socket.send(response_data.encode())

    # 关闭当前连接
    new_client_socket.close()


def main():
    """主函数"""
    # 创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置地址重用
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 绑定端口
    tcp_server_socket.bind(("", 8081))
    # 设置监听,让套接字由主动变为被动接收
    tcp_server_socket.listen(128)
    # 接受客户端连接 定义函数 request_handler()
    while True:
        new_client_socket, ip_port = tcp_server_socket.accept()
        print("新客户来了:", ip_port)
        # 调用功能函数处理请求并且响应
        request_handler(new_client_socket, ip_port)

    # 11、关闭操作
    # tcp_server_socket.close()


if __name__ == '__main__':

    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值