PythonGam

2024-05-16 01:46:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我完全无法尝试用python为我的游戏创建UDP服务器/客户端。我对这门语言还不熟悉,在社交方面的经验有限。现在,服务器正在运行,但似乎没有从客户端收到任何消息。在

服务器:

class GameServer:
    class GameServerUDPHandler(socketserver.BaseRequestHandler):
        def handle(self):
            data = self.request[0].strip()
            socket = self.request[1]
            print("{} wrote:".format(self.client_address[0]))
            print(data)
            socket.sendto(data.upper(), self.client_address)

    def __init__(self, port):
        self.server = socketserver.UDPServer(("localhost", port), self.GameServerUDPHandler)

    def start_server(self):
        self.server.serve_forever(

客户:

^{pr2}$

-主程序/程序开始

import gameserver
import gameclient

if __name__ == "__main__":
    server = gameserver.GameServer(1300)
    server.start_server()
    client = gameclient.GameClient(1300, "localhost")
    client.register()

注意:我很可能会犯多个错误,并且可能违反了语言中的一些最佳实践。我真的不知道。在


Tags: self服务器client语言客户端dataserverrequest
2条回答

此库似乎不是异步的,因此您对serve_forever的第一次调用将不会返回,并且您的客户端永远不会启动。您可以创建一个新线程来启动服务器,或者将客户机和服务器拆分为不同的进程。在

问题是其中一些呼叫被阻塞了。特别是,serve_forever()方法将永远运行,因此如果希望程序的其余部分继续运行,则需要将该方法放在单独的线程上:

import threading
if __name__ == "__main__":
    server = GameServer(1300)
    server_thread = threading.Thread(target=lambda: server.start_server())
    server_thread.start()

    time.sleep(1) # Give it time to start up; not production quality code of course

    client = GameClient(1300, "localhost")
    client.register()

socket.recv()也是一个阻塞调用,但在这种情况下可能没问题。在

相关问题 更多 >