gpt4 book ai didi

python - 调用句柄后调用recv挂起

转载 作者:行者123 更新时间:2023-12-03 11:53:27 25 4
gpt4 key购买 nike

我有一个 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()

然后在我们的单元测试中的一些其他代码中,我们尝试连接到假服务器:
    print("about to connect")
self.__imapCon = imaplib.IMAP4("localhost", 5593)
print("about to login") # we never get here
self.__imapCon.login(Config.config["imapUser"], Config.config["imapPassw"])

服务器的实现如下:
class FakeImapServerHandler(SocketServer.BaseRequestHandler):

def handle(self):
print("handling request")
incoming = self.request.recv(1024)
print("request was: " + incoming ) # never get here

最佳答案

(这次作为答案发布)根据 IMAP 协议(protocol),服务器先说话,向客户端发送 OK 问候语。您的服务器和客户端似乎都试图同时相互接收:

atlas% telnet chaos 143
Trying 192.168.1.5...
Connected to chaos
Escape character is '^]'.
* OK chaos Cyrus IMAP4 v2.2.13-Debian-2.2.13-19 server ready

关于python - 调用句柄后调用recv挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5412265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com