【发布时间】:2013-06-09 19:23:59
【问题描述】:
尝试在 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(
客户:
import socket
import sys
class GameClient:
def __init__(self, port, host):
self.port = port
self.host = host
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def register(self):
self.socket.sendto(bytes("register\n", "utf-8"), (self.host, self.port))
self.numberID = int(self.socket.recv(1024))
print("Received: {}".format(self.numberID))
-主程序/程序启动
import gameserver
import gameclient
if __name__ == "__main__":
server = gameserver.GameServer(1300)
server.start_server()
client = gameclient.GameClient(1300, "localhost")
client.register()
注意:我最有可能在多处出错,并且可能违反了该语言的几个最佳实践。我真的不知道。
【问题讨论】:
-
我意识到你刚刚学习了一大堆 Python,很抱歉告诉你,但如果你想做不平凡的网络,你最好再学习一个框架。见Twisted。
-
@kirelagin 谢谢。我想我不必这样做,特别是因为我花了几个小时试图安装 Twisted 无济于事(它只安装在我的 mac 上的 python2 上,并且由于错误而无法在 python3 中工作)。
-
哦,对了。他们有一个plan to make it work with Python 3.3,但我不确定他们的进展如何……我仍然担心你现在最好的选择是切换到 Python 2,因为没有 Twisted 的 ntwork 编程很痛苦。
-
@MikeG:你为什么不把客户端和服务器分成单独的进程?
-
@MikeG 正如我所说,目前我没有关注他们的进展,但移植过程似乎还没有真正接近尾声……还有另一个nice page。
标签: python networking python-3.x network-programming