Python 套接字编程:连接到服务器时应用程序冻结

Python Socket Programming: Application freezes when connecting to a server

我是 Python 中的套接字编码新手,我编写了这个简单的函数来连接到服务器。它在 tkinter window 中运行。我有一个 Entry 小部件,您可以在其中输入要连接的服务器的 IP 地址。但是,当您单击按钮进行连接时,应用程序会挂起并冻结。这是下面的代码。

def Test(self):
    socket.setdefaulttimeout(5)
    lengthInfo = self.lengthEntry.get()
    if self.portEntry.get() != '':
        portInfo = int(self.portEntry.get())
    serverInfo = self.serverEntry.get()
    conn = socket.socket()
    if not self.portEntry.get():
        portInfo = 80
    try:
        conn = socket.socket()
        name = socket.gethostbyname(serverInfo)
        conn.connect((name,portInfo))
        ans = conn.recv(2048)
        self.outputWindow.insert(END, "Connection successful: \n \
        port:{}, server:{} ('{}'), '{}' \n".format(portInfo, name, serverInfo, \
        ans))
        return
    except Exception as e:
        self.outputWindow.insert(END, str(e) + "\n")

我本来以为是因为现在有超时,但是正如你所看到的,我在代码的第一行添加了一个5秒的超时。我以为是因为应用程序在连接时遇到了某种问题,但我检查了 Windows 任务管理器,在网络部分下没有 activity。我也 运行 Ubuntu 14.04 中的程序,但得到了相同的结果。 有什么解决办法吗?

套接字等待来自服务器的 2,048 个字节 (conn.recv(2048)),我猜它们永远不会到达。