我在使用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()
没有呢?
答案 0 :(得分:0)
两者之间的唯一区别是“读取”读取向上到n个字节,而readexactly读取完全 n个字节,如果在n个字节之前到达结束,则 IncompleteReadError ,这可能会导致您的套接字收到您指出的错误。