python-3.x - 如何等到客户端消息以 \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 秒,则应关闭连接。
解决方案
推荐阅读
- php - PHP -> Json,访问嵌套数组
- python - groupby() cumsum() 4 列
- javascript - 无法分配给 React useRef 中的只读属性“当前”
- javascript - 如何将值从一个函数发送到另一个函数
- powershell - 从 TXT 或 CSV 获取主机名,存储在变量中
- java - 在 AWS S3 上上传时图像和 PDF 文件损坏
- dependency-injection - Dagger/Hilt 如果模块是抽象类或接口,它们有区别吗?
- join - 谷歌表数组公式+加入+过滤
- ios - 为什么 .foregroundColor 属性不适用于 NSMutableAttributedString?
- ruby-on-rails - 如何验证rails中的时间戳?