【问题标题】:Function select.select get hangs with python sockets and Tkinter函数 select.select 使用 python 套接字和 Tkinter 挂起
【发布时间】:2014-11-22 06:27:16
【问题描述】:

我已经尝试修复此错误 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)

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

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

【问题讨论】:

    标签: python sockets tkinter


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 2016-09-06
      相关资源
      最近更新 更多