在服务器中,您正在将远程套接字(由返回的套接字accept()
)设置为非阻塞模式,这意味着该套接字上的I / O将在没有数据读取的情况下立即因异常而终止。
与服务器建立连接与客户端发送图像数据之间通常会有一段时间。一旦连接被接受,服务器将尝试立即从客户端读取数据,但是,可能尚无任何数据要读取,因此c.recv()
引发了socket.error: [Errno 11] Resource temporarily unavailable
异常。Errno 11对应于EWOULDBLOCK
,因此recv()
中止,因为没有可供读取的数据。
您的代码似乎不需要非阻塞套接字,因为accept()
while循环的顶部有一个,因此一次只能处理一个连接。您只需删除对的呼叫即可c.setblocking(0)
解决此问题。