Python 为什么asyncio没有';t看到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] =

我正在编写一个快速python服务器,它处理TCP传输的128位数据,并从中执行序列号和命令。我找到了一个服务器,并根据需要对其进行了更改,但成功连接后,它没有看到TCP数据包,以下是服务器:

#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)