pyqt tcp通信_PyQt和TCP/IP

好的,我有一个非常简单的回合制应用程序(游戏)。在

每个用户在服务器上发送一个请求,然后等待响应。重要的是,只有一个用户在服务器上发出请求(发送他的操作),而所有其他用户都在等待,如果服务器向他们发送一些数据,那么他们必须始终检查(循环)是否有来自服务器的内容。在

我使用python“socket”的内置模块,我管理客户机的方式是这样的:为每个用户创建一个线程,在该线程中运行无限循环,直到应用程序结束,该线程检查请求(如果轮到用户)或检查它是否有任何东西要发送给其他用户。现在我们来谈谈客户。每个客户机又有一个线程具有无限循环,等待来自服务器的数据。在

问题是GUI是用PyQt4.4制作的,在这里我无法进入PyQt本身的循环(尽管我已经看到,使用twisted是可能的,但是我必须重写代码),所以我必须使用线程,这意味着我可以使用经典的python线程库或QThread,但遗憾的是,QThread没有任何事件,这是非常重要的,因为我希望总是在收到来自服务器的消息之后等待程序的响应,这样我就可以再次向服务器发送响应。另一方面,我不确定是否可以使用线程中的线程来发出信号。那么哪一个才是正确的选择呢?在

顺便说一句:实际上,运行无限客户端和服务器端循环是可以的吗?因为在我看过的每一个教程中,客户在得到答案后马上关闭连接。在

编辑:

下面是一些代码

用于与客户端连接的服务器端循环:while self.running:

if self.is_on_turn == p and self.reply is not None:

cmd = conn.recv(1024)

if cmd == '':

conn.close()

return

cmd = eval(cmd)

if self.is_on_turn != p: # User is not on turn

print "END"

conn.sendall("END")

else:

self.queue.put(cmd)

ev.wait() # Here works another program with the message and decide what to do next

ev.clear() #

conn.sendall(str(self.message))

if self.reply:

ev.wait() #

ev.clear() #

if self.reply:

r = conn.recv(1024)

if r == '':

conn.close()

return

self.queue.put(eval(r))

ev.wait() #

ev.clear() #

conn.sendall(str(self.message))

conn.close()

客户端循环:

^{pr2}$

管道就在那里,因为我一开始是在多处理中创建的,所以应该有PyQt的发射信号,但是正如我所说的,我不确定应该使用哪种方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值