打印收到的服务器数据时出现问题
Problems when print the server data received
我有下一个问题:当我将此代码用于带有 python asyncio 库的 EchoServer 时
import asyncio
class EchoServer(asyncio.Protocol):
def connection_made(self, transport):
self.transport = transport
def data_received(self, data):
print('Message received: {}'.format(data.decode()), end='')
self.transport.write(data + b'\n')
def connection_lost(self, exc):
print('Client disconnected...')
loop = asyncio.get_event_loop()
coro = loop.create_server(EchoServer, '127.0.0.1', 12345)
server = loop.run_until_complete(coro)
print('Listening on {}'.format(server.sockets[0].getsockname()))
try:
loop.run_forever()
except KeyboardInterrupt:
pass
finally:
server.close()
loop.close()
在这一行
print('Message received: {}'.format(data.decode()), end='')
当我使用:end=''
时,没有'\n'
的客户端消息不会登录到控制台,只显示客户端断开连接时收到的消息。
像这样:
Message received: testMessage received: testMessage received: testClient disconnected...
此消息仅在客户端断开连接时显示。
但是当我在来自客户端的消息末尾使用 '\n'
时,消息会在客户端发送消息时显示在控制台上。像这样:
Message received: test
Message received: test
Message received: test
client disconnected...
在这种情况下,在 3 个不同的时间,最后客户端断开连接。
当我使用这条线时:
print('Message received: {}'.format(data.decode()))
没有 end=''
,在消息末尾没有 '\n'
的情况下可以很好地处理客户端消息。
我想知道为什么。
问题不在于控制台消息格式,问题在于接收到的数据在控制台中显示的时间。
PS:抱歉我的英语不好。
您应该手动刷新标准输出。
print('Message received: {}'.format(data.decode()), end='')
sys.stdout.flush()
我有下一个问题:当我将此代码用于带有 python asyncio 库的 EchoServer 时
import asyncio
class EchoServer(asyncio.Protocol):
def connection_made(self, transport):
self.transport = transport
def data_received(self, data):
print('Message received: {}'.format(data.decode()), end='')
self.transport.write(data + b'\n')
def connection_lost(self, exc):
print('Client disconnected...')
loop = asyncio.get_event_loop()
coro = loop.create_server(EchoServer, '127.0.0.1', 12345)
server = loop.run_until_complete(coro)
print('Listening on {}'.format(server.sockets[0].getsockname()))
try:
loop.run_forever()
except KeyboardInterrupt:
pass
finally:
server.close()
loop.close()
在这一行
print('Message received: {}'.format(data.decode()), end='')
当我使用:end=''
时,没有'\n'
的客户端消息不会登录到控制台,只显示客户端断开连接时收到的消息。
像这样:
Message received: testMessage received: testMessage received: testClient disconnected...
此消息仅在客户端断开连接时显示。
但是当我在来自客户端的消息末尾使用 '\n'
时,消息会在客户端发送消息时显示在控制台上。像这样:
Message received: test
Message received: test
Message received: test
client disconnected...
在这种情况下,在 3 个不同的时间,最后客户端断开连接。 当我使用这条线时:
print('Message received: {}'.format(data.decode()))
没有 end=''
,在消息末尾没有 '\n'
的情况下可以很好地处理客户端消息。
我想知道为什么。
问题不在于控制台消息格式,问题在于接收到的数据在控制台中显示的时间。
PS:抱歉我的英语不好。
您应该手动刷新标准输出。
print('Message received: {}'.format(data.decode()), end='')
sys.stdout.flush()