【发布时间】:2018-05-24 04:58:54
【问题描述】:
因此,作为我的项目(2D 多人纸牌游戏)的一部分,我想出了如何在线托管和运行服务器脚本。我的计划是让两个单独的 kivy 客户端连接到服务器(这将只是一个带有命令的脚本)。
但是我对操作顺序有些困惑,因为我认为客户端连接可能与消息循环发生冲突,所以我想知道是否有人可以基本上告诉我我应该是什么正在做:
我将把它用作我的服务器脚本:
import socket
serversocket = socket.socket()
host = 'INSERTIPHERE'
port = PORTHERE
serversocket.bind(('', port))
serversocket.listen(1)
while True:
clientsocket,addr = serversocket.accept()
print("got a connection from %s" % str(addr))
msg = 'Thank you for connecting' + "\r\n"
clientsocket.send(msg.encode('ascii'))
clientsocket.close()
这是我的客户端连接函数
def Main():
host = 'INSERTIPHERE'
port = PORTHERE
mySocket = socket.socket()
mySocket.connect((host, port))
message = input(' -> ')
while message != 'q':
mySocket.send(message.encode())
data = mySocket.recv(1024).decode()
print('Received from server: ' + data)
message = input(' -> ')
mySocket.close()
注意:我知道服务器和客户端在功能上并不完全一致,但如果我现在至少可以确认连接,我可以从那里开始工作。
我基本上想知道如何将这段代码放入这样的简单 kivy 应用程序中:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class BoxWidget(BoxLayout):
pass
class BoxApp(App):
def build(self):
return BoxWidget()
if __name__ == '__main__':
BoxApp().run()
我最好的猜测是你想要:
- 在打开客户端之前建立连接
- 在您运行客户端实例(即 BoxApp(server).run()?)时,将服务器连接传递给主要小部件(在本例中为 Box 小部件)
- 在 BoxWidget 的消息循环函数中使用该连接
我也知道 Kivy 已经内置了 Twisted 解决方案,但我在 python 2-3 差异方面遇到了麻烦。
感谢您的阅读。
澄清一下:我现在要做的就是打开一个空白窗口,并向命令行发送一条确认消息(或在窗口中显示标签失败)。
【问题讨论】:
标签: python-3.x sockets tcp kivy