【发布时间】:2020-12-11 10:43:15
【问题描述】:
我有一个这样写的小型服务器:
async def handle_client(reader, writer):
request = (await reader.read()).decode('utf8') # should read until end of msg
print(request)
response = "thx"
writer.write(response.encode('utf8'))
await writer.drain()
writer.close()
loop = asyncio.get_event_loop()
loop.create_task(asyncio.start_server(handle_client, socket.gethostname(), 8886))
loop.run_forever()
还有一个这样写的小客户:
async def tcp_echo_client(message):
reader, writer = await asyncio.open_connection(
my_ip, 8886)
print(f'Send: {message!r}')
writer.write(message.encode())
await writer.drain()
data = await reader.read() # should read until end of msg
print(f'Received: {data.decode()!r}')
print('Close the connection')
writer.close()
await writer.wait_closed()
asyncio.run(tcp_echo_client(f"Hello World!"))
客户端和服务器开始通信,但从未完成。 为什么阅读器无法识别味精结束?
如果我写
request = (await reader.read(1024)).decode('utf8')
相反,它可以工作,但我需要接收未定义的大量数据。
我尝试像这样修改服务器的代码:
while True:
request = (await reader.read(1024)).decode('utf8')
if not request:
break
它接收所有数据块,但在最后一个块之后仍然等待。为什么? 我如何从服务器告诉读者停止监听并继续在代码中发送答案?
【问题讨论】:
标签: python-3.x sockets python-asyncio