Python socket 同时响应多个请求

  1. 创建 socket 对象,监听地址
  2. while True: serversocket.accept() 不断接收请求
  3. conn 其实就是 socket 对象,接受到请求之后,conn.recv(1024) 不断拼接出 request,然后解析 request
  4. conn.send(response), conn.close() 响应请求,关掉
  5. 能同时响应多个请求是因为把 handler 部分新增线程来处理
    • 在 socket.accept() 之后,把 handle_connection() 放到线程处理。
import socket
import time
import threading

EOL1 = b'\n\n'
EOL2 = b'\n\r\n'
body = b'fuck the world'
response_params = [
    b'HTTP/1.0 200 OK',
    b'Date: Sat, 10 jun 2017 01:01:01 GMT',
    b'Content-Type: text/plain; charset=utf-8',
    'Content-Length: {}\r\n'.format(len(body)).encode('utf-8'),
    body
]

response = b'\r\n'.join(response_params)

def handle_connection(conn, addr):
    request = b""
    while EOL1 not in request and EOL2 not in request:
        request += conn.recv(1024)
    print(request)

    time.sleep(1)
    conn.send(response)
    conn.close()


def main():
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    serversocket.bind(('127.0.0.1', 8080))
    serversocket.listen(20)
    print('http://127.0.0.1:8080')

    try:
        while True:
            conn, addr = serversocket.accept()
            # handle_connection(conn, addr) 单线程
            t = threading.Thread(target=handle_connection,
                                 args=(conn, addr))
            t.start()
    finally:
        serversocket.close()

if __name__ == '__main__':
    main()

// 代码来自: https://www.the5fire.com/thread-socketserver.html
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,287评论 0赞 6
  • 说明 本文 翻译自 realpython 网站上的文章教程 Socket Programming in Pytho...
    keelii阅读 2,504评论 0赞 16
  • 最近在学习Python看了一篇文章写得不错,是在脚本之家里的,原文如下,很有帮助: 一、网络知识的一些介绍 soc...
    qtruip阅读 2,867评论 0赞 6
  • 网络 理论模型,分为七层物理层数据链路层传输层会话层表示层应用层 实际应用,分为四层链路层网络层传输层应用层 IP...
    FlyingLittlePG阅读 1,025评论 0赞 0
  • Socket 一、概述 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常...
    土兴牧马人阅读 392评论 0赞 0

友情链接更多精彩内容