我有一个Python类,用来为单元测试模拟IMAP服务器。当handle()
回调发生时,我尝试使用recv()
来获取刚刚到达的数据,但是我阻塞了recv()
调用。我原以为recv()
会返回接收到的数据,但是它就在那里。在
如果有关系,我可以看到服务器和主线程在日志输出中是不同的。在
我假设这与套接字刚刚打开但没有数据通过它发送有关。在尝试调用recv()
之前,是否需要检查一下是否是这种情况?在
我用以下方法创建了服务器:
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
pass
...
# inside another class, we've got:
def startUp(self):
server = ThreadedTCPServer(('localhost', 5593), FakeImapServerHandler)
server.allow_reuse_address = True
server_thread = threading.Thread(target=server.serve_forever)
server_thread.setDaemon(True)
server_thread.start()
然后在单元测试中的其他代码中,我们尝试连接到假服务器:
^{pr2}$服务器的实现方式如下:
class FakeImapServerHandler(SocketServer.BaseRequestHandler):
def handle(self):
print("handling request")
incoming = self.request.recv(1024)
print("request was: " + incoming ) # never get here
(这次作为答案发布)根据IMAP协议,服务器首先发言,向客户端发送OK问候语。您的服务器和客户端似乎都在试图同时从对方接收:
相关问题 更多 >
编程相关推荐