首页 > 解决方案 > 如何等到客户端消息以 \r\n\r\n 或 \n\n 结束,然后发回响应

问题描述

这是我的脚本:

#!/usr/bin/python3

import socket               
import _thread


WEB_SERVER_VERSION = "1.0"

def on_new_client(clientsocket,addr):
    global WEB_SERVER_VERSION
    body = ""
    body += "HTTP/1.1 200 OK\n\nWelcome to Example Web Server " + WEB_SERVER_VERSION + "\r\n\r\n"
    body = bytes(body, encoding="UTF-8")
    msg = "";

    try:
        msg += str(clientsocket.recv(516), encoding="UTF-8")
        print(bytes(msg, encoding="UTF-8"))
    except Exception as e:
        clientsocket.close()
    
    if len(msg) >= 512:
        clientsocket.send(b"Exceeded maximum message size supported by the system. Limit the query size to 511 bytes.\r\n")
        clientsocket.close()
        
    print(addr, ' >> ', bytes(msg, encoding="UTF-8"))

    clientsocket.send(body)
        
    clientsocket.close()

s = socket.socket()         
host = "192.168.123.123" 
port = 8080


print('Server started!')
print('Waiting for clients...')

try:
    s.bind((host, port))        
except Exception as e:
    host = socket.gethostbyname(socket.gethostname())
    if not host:
        host = "127.0.0.1"
    s.bind((host, port))

s.listen(5)                 

while True:
   c, addr = s.accept()     
   _thread.start_new_thread(on_new_client,(c,addr))

s.close()

所以当客户端请求时:

$ telnet localhost 8080
something
something2
something3
something4


我只想在两个换行符后回复,要么\r\n\r\n要么\n\n

我曾尝试使用循环,但这对我来说不起作用。请帮忙

我怎样才能做到这一点?

而且,我想设置一个超时,这样用户就不能让服务器一直与用户在线。因此,如果用户发送\r\n\r\n和结束请求的时间超过 10 秒,则应关闭连接。

标签: python-3.xsocketspython-sockets

解决方案


推荐阅读