gpt4 book ai didi

Python:使用简单的聊天服务器/客户端进行 2 人游戏

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:25 25 4
gpt4 key购买 nike

我编写了一个Python国际象棋游戏,我想让两个人在两台不同的计算机上玩它。在不使用外部库的情况下,我的第一个想法是尝试调整简单聊天服务器/客户端的代码,以允许游戏向两个用户传达 Action 。根据我的研究,以下代码似乎非常标准:

# client
from socket import *
PORT = 8000

s = socket(AF_INET, SOCK_STREAM)
s.connect(('', PORT))

while True:
msg = raw_input('>> ')
s.send(msg)
reply = s.recv(1024)
if reply:
print '<< ' + str(reply)

s.close()

#server
from socket import *

HOST = ''
PORT = 8000

s = socket(AF_INET, SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(2)

conn, address = s.accept()
while True:
print 'got a connection'
data = conn.recv(1024)

if data:
print 'we got it'
conn.sendall(data)
s.close()

我的想法是,一个玩家(邀请其他玩家加入游戏的主机)启动游戏和服务器。然后客户端移动,将移动发送到服务器,并将更改反射(reflect)在 UI 上。

但是,上面监听消息/响应的无限循环给我带来了麻烦:显然,没有其他代码可以执行。我宁愿让客户端和服务器之间的连接在后台进行,或者更好地利用 UI 已使用的无限循环来监听事件。

我的问题:是否可以使用 Tkinter 的 mainloop 充当无限循环来监听传入数据和回复?或者,将服务器和客户端作为子进程运行会更好吗?我想我真正想要的是将监听/接收移动视为事件:当进行移动时,会发送一条消息,并由客户端“处理”。

注意:这是我第一次使用套接字库 - 如果任何答案都能够尊重我对这个主题的相对天真,那就太好了。

编辑:我认为我可能需要的是异步聊天,但我非常希望了解如何调整此代码。

最后评论:gordosac的回答提供了一些很好的搜索想法。我最终找到了我所需要的here

最佳答案

看看这个问题:

How to use threading in Python?

你会为客户做这样的事情:

import threading
import os
import time

# this function meant to be started in a separate thread
get_raw_input_and_send():
#put while loop here

if __name__ == "__main__":
t = threading.Thread(target=get_raw_input_and_send)
t.daemon = True
t.start()
while True:
if not t.isAlive():
os.sys.exit(-1)
time.sleep(5)

然后在服务器端执行相同的操作,但使用服务器代码中的 while 循环

关于Python:使用简单的聊天服务器/客户端进行 2 人游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24622769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com