函数select.select使用python套接字和Tkinter进行挂起

时间:2014-11-21 20:12:12

标签: python sockets tkinter

我一直试图将此错误修复3天,直到现在我都无法解决。 我做了一个简单的服务器,可以处理多个客户端,一切正常。现在我尝试使用代码并使用一些UI(使用Tkinter)并且我没有成功。

以下代码挂起在select.select函数上。

我猜测问题出在客户端代码中,这是客户端代码:

class OtherFrame(Tk.Toplevel, HandleScreens.HandleScreens):
def __init__(self):
    print 'Classsd'
    Tk.Toplevel.__init__(self)
    self.root = self
    self.root.geometry('800x450+350+150')
    self.root["bg"] = "#3498db"
    self.root.title('My Project')
    self.protocol('WM_DELETE_WINDOW', self.doSomething)

    client_socket = socket.socket()

    port = 3548

    host = '0.0.0.0'

    client_socket.connect((host, port))



    print 'Connected to the server'

    while True:

        sockets_list = [sys.stdin, client_socket]

        rlist, wlist, xlist = select.select(sockets_list, [], [])

        for curr_sock in rlist:
            if curr_sock == client_socket:
                data = curr_sock.recv(1024)
                if not data:
                    print '\nDisconnected from server'
                    sys.exit()
                else:
                    pass

            else:
                client_data = ''
                client_socket.send(client_data)

此代码只是挂起。它什么都不做。我希望有人知道我需要改变什么。

非常感谢,对不起我的英语很差。

1 个答案:

答案 0 :(得分:0)

因为那个while循环你永远不会结束。如果我是你,我会将当前在while循环中的所有内容放在一个新的定义中,然后在定义代码的末尾写self.root.after(10, <new def name>)。这将阻止您的代码阻止tkinter,从而阻止整个程序。