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

时间:2015-02-09 02:56:07

标签: python sockets windows-8 network-programming

我是Python中的套接字编码新手,我编写了这个简单的函数来连接服务器。它在tkinter窗口中运行。我有一个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任务管理器,并且在网络部分下没有任何活动。我也在Ubuntu 14.04中运行该程序,但得到了相同的结果。 任何解决方案?

1 个答案:

答案 0 :(得分:2)

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

相关问题