Python 为什么asyncio没有';t看到TCP包了吗?
我正在编写一个快速python服务器,它处理TCP传输的128位数据,并从中执行序列号和命令。我找到了一个服务器,并根据需要对其进行了更改,但成功连接后,它没有看到TCP数据包,以下是服务器:Python 为什么asyncio没有';t看到TCP包了吗?,python,server,python-asyncio,Python,Server,Python Asyncio,我正在编写一个快速python服务器,它处理TCP传输的128位数据,并从中执行序列号和命令。我找到了一个服务器,并根据需要对其进行了更改,但成功连接后,它没有看到TCP数据包,以下是服务器: #aioserver.py def accept_client(client_reader, client_writer): task = asyncio.Task(handle_client(client_reader, client_writer)) clients[task] =
#aioserver.py
def accept_client(client_reader, client_writer):
task = asyncio.Task(handle_client(client_reader, client_writer))
clients[task] = (client_reader, client_writer)
def client_done(task):
del clients[task]
client_writer.close()
log.info("End Connection")
log.info("New Connection")
task.add_done_callback(client_done)
async def handle_client(client_reader, client_writer):
# give client a chance to respond, timeout after 10 seconds
try:
data = await asyncio.wait_for(client_reader.readline(), timeout=10.0)
print(data)
except asyncio.exceptions.TimeoutError:
data = None
if data is None:
log.warning("Expected WORLD, received None")
return
def main():
loop = asyncio.get_event_loop()
f = asyncio.start_server(accept_client, host=None, port=8080)
loop.run_until_complete(f)
loop.run_forever()
if __name__ == '__main__':
log = logging.getLogger("")
formatter = logging.Formatter("%(asctime)s %(levelname)s " +
"[%(module)s:%(lineno)d] %(message)s")
# setup console logging
log.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
log.addHandler(ch)
main()
服务器输出:
2021-05-01 20:55:47,394 DEBUG [selector_events:59] Using selector: KqueueSelector
2021-05-01 20:55:55,102 INFO [aioserver:26] New Connection
2021-05-01 20:56:05,107 WARNING [aioserver:44] Expected WORLD, received None
2021-05-01 20:56:05,107 INFO [aioserver:24] End Connection
客户:
def make_connection(host, port):
task = asyncio.Task(handle_client(host, port))
clients[task] = (host, port)
def client_done(task):
del clients[task]
log.info("Client Task Finished")
if len(clients) == 0:
log.info("clients is empty, stopping loop.")
loop = asyncio.get_event_loop()
loop.stop()
log.info("New Client Task")
task.add_done_callback(client_done)
async def handle_client(host, port):
log.info("Connecting to %s %d", host, port)
client_reader, client_writer = await asyncio.open_connection(host, port)
log.info("Connected to %s %d", host, port)
try:
data = struct.pack('HBBQ', 0, 255, 255, 255)
client_writer.write(data)
finally:
log.info("Disconnecting from %s %d", host, port)
client_writer.close()
log.info("Disconnected from %s %d", host, port)
def main():
log.info("MAIN begin")
loop = asyncio.get_event_loop()
make_connection('localhost', 8080)
loop.run_forever()
log.info("MAIN end")
if __name__ == '__main__':
log = logging.getLogger("")
formatter = logging.Formatter("%(asctime)s %(levelname)s " +
"[%(module)s:%(lineno)d] %(message)s")
# setup console logging
log.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
log.addHandler(ch)
main()
不管怎样,有人知道更快的python服务器框架吗?解决了。。。服务器端未定义缓冲区大小。它应该是
client\u reader.read(128)