为什么StreamReader.readexactly()导致套接字错误而不是StreamReader.read()?

时间:2017-10-18 08:02:12

标签: python sockets python-asyncio

我在使用Asyncio进行网络编写python应用程序。我也有类似的代码:

try:
    data = await self._reader.readexactly(10000)

    # Code that uses data
except IncompleteReadError as e:
    data = e.parial
    # More code

当我尝试运行此代码时,它似乎永远不会实际运行。如果我在第二行设置断点,断点将跳闸,但忽略该函数的其余部分。

我最接近错误的是来自asyncio logger:

Traceback (most recent call last):
  File "c:\python36\Lib\asyncio\selector_events.py", line 724, in _read_ready
    data = self._sock.recv(self.max_size)
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine

data = await self._reader.read(10000)替换第二行似乎可以解决此问题,但read()无法解决我的问题,我需要使用readexactly()。那么为什么readexactly()导致套接字错误但read()没有呢?

1 个答案:

答案 0 :(得分:0)

两者之间的唯一区别是“读取”读取向上到n个字节,而readexactly读取完全 n个字节,如果在n个字节之前到达结束,则 IncompleteReadError ,这可能会导致您的套接字收到您指出的错误。