吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3634|回复: 8
收起左侧

[Python 转载] python 多线程实现简易 web服务器

[复制链接]
山野村夫-陈墨 发表于 2019-12-2 23:00
这是一个简单的web服务器, 通过socket下的tcp和python多线程实现。
没有足够的功能, 只能作为一个了解bs模式的样例。

运行:
打开浏览器,输入“localhost:1027”,即可。(首先打开服务器)
[Python] 纯文本查看 复制代码
import  socket
import  re
import  threading

'''
    多线程实现web服务器:
        # 1、新建线程;
        # 2、在新线程中关闭套接字
        
        # 注:线程资源复制,套接字关闭一个就行    

'''

def response(new_socket):
    data  =  new_socket.recv(1024).decode("utf-8").splitlines()

    print("请求: ")
    for item in  data:
        print(item)

    ret  = re.search(r'[^/]+(/[^ ]*)',  data[0])

    print(ret)
    if ret:
        file_name = ret.group(1)
        # print("*"*50, file_name)
        if file_name == "/":
            file_name = "/index.html"


    # 2. 返回http格式的数据,给浏览器

    try:
#  网页文件的路径自己设置
        f = open("F:/code/python/tmp/web/HTML家政服务公司网站模板" + file_name, "rb")
    except:
        response = "HTTP/1.1 404 NOT FOUND\r\n"
        response += "\r\n"
        response += "------file not found-----"
        new_socket.send(response.encode("utf-8"))
    else:
        html_content = f.read()
        f.close()
        # 2.1 准备发送给浏览器的数据---header
        response = "HTTP/1.1 200 OK\r\n"
        response += "\r\n"
        # 2.2 准备发送给浏览器的数据---boy
        # response += "hahahhah"

        # 将response header发送给浏览器
        new_socket.send(response.encode("utf-8"))
        # 将response body发送给浏览器
        new_socket.send(html_content)
        # 新进程中关闭套接字
        new_socket.close()

def main():

    # 初始化套接字
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server.setsockopt(socket.SOL_SOCKET,   socket.SO_REUSEADDR, 1)
    # 1、绑定端口
    tcp_server.bind( ('',1027))
    # 2、设置监听
    tcp_server.listen(128)

    while True:
        # 3、等待接收
        new_server,  client_adder = tcp_server.accept()
        #4、响应
        threading.Thread( target= response,args=(new_server,)).start()
        #5、关闭新套接字------此处关闭会导致新套接字无法正常使用
        #new_server.close()
    # 6、关闭服务器套接字
    tcp_server.close()

if  __name__ == "__main__":
    main()


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

18519204131 发表于 2019-12-2 23:07
厉害大佬
a3322a 发表于 2019-12-2 23:52
MOEYU_VANILLA 发表于 2019-12-3 00:13
1983 发表于 2019-12-3 00:16
嗯,是听精简的、。。。
shlboliqiao 发表于 2019-12-9 12:40
多谢分享,学习下
xinjth 发表于 2020-1-12 09:36
看看,学习中!
nn1023 发表于 2020-1-13 17:13
收藏了,很好用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 19:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表