python - 循环之神再次来袭——如何在 GUI mainloop 的情况下保持套接字连接?

标签 python sockets client-server tkinter

问题

如何在同一脚本中同时运行 Tkinter mainloop 和无限服务器循环?

背景

我正在使用 Tkinter ( Python 2.7.3) 创建一个 GUI 服务器。到目前为止,GUI 工作正常,服务器工作正常,但是我在整合两者时遇到了问题。据我所知(如果我错了请纠正我)服务器需要无限循环运行才能接受新用户。可悲的是,GUI 还需要一个无限循环。我想知道如何让两个循环同时运行。

我当前的主循环函数如下所示(s 是套接字对象):

def mainloop(s):
    while True:
        channel, addr = s.accept()
        print "Connected with", addr

这显然是保持服务器运行所必需的(我认为)。但问题是,这个循环出现在我的 mainloop 之前,因此我对此有疑问。如果我反过来做,服务器永远不会打开。

完整代码

我的服务器代码是here , 我的客户是 here .

谢谢!

最佳答案

使用线程模块在新线程中打开服务器主循环。

替换

mainloop(s)

thread.start_new_thread(mainloop, (s,))

然后你可以调用 root.mainloop() 来运行 Tkinter,就像你做的那样。


更新

根据下面 A. Rodas 的评论,最好使用与 Python 3 兼容的较新的 threading 模块。

所以你可以替换

mainloop(s)

threading.Thread(target=mainloop, args=(s,)).start()

关于python - 循环之神再次来袭——如何在 GUI mainloop 的情况下保持套接字连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15754878/

相关文章:

python - PyTorch 相当于 tf.dynamic_partition

python - Pandas 在相同事件但不同时间戳上展平时间序列数据帧

java - 在简单的多人 JAVA 游戏中从哪里开始使用套接字

c# - 服务器客户端发送/接收多个客户端

python - 将字符串从 .csv 转换为日期时间以判断它是否是特定的工作日

python - 查询机器主机名

sockets - 如何修复 mediawiki 中的 'Redis server error: socket error on read socket' 错误

python - UDP 和 TCP 始终为一个客户端使用相同的 IP?

c - 多线程客户端服务器执行有时不会结束

python - 在 Python 中使用 s.recv() 时出现奇怪的错误