我有一个客户端 - 服务器“蛇”游戏与TCP连接工作得很好,我想尝试UDP方式。
我想知道它应该如何使用?我知道UDP如何工作,如何制作一个简单的ECHO示例,但我想知道如何执行以下操作:
例如,对于TCP,每个TICK(1/15秒)服务器都会向客户端发送新的Snake头位置。
使用UDP,我应该做这样的事情:
客户端:
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
serverAddr = (('localhost', PORT))
while 1:
client.sendto('askForNewHead', serverAddr)
msg, addrServer = client.recvfrom(1024)
game.addPosition(msg)
服务器端:
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind((HOST, PORT))
while 1:
data, addr = server.recvfrom(1024)
server.sendto(headPosition, addr)
所以这里客户端必须要求服务器获取新的头部位置,然后服务器发送答案。我设法让它以这种方式工作,但我无法弄清楚它是否是一种好的方式。
在使用我的TCP连接时,客户端必须要求udp进行更新似乎很奇怪,客户端只需要等待,直到他收到消息。
答案 0 :(得分:2)
TCP和UDP之间存在差异,但不是您描述的方式。与TCP一样,客户端可以从服务器获取消息,而无需每次都询问新数据。不同之处是:
这意味着,您不需要问新的头等。每时每刻。相反,客户端必须只向服务器发送一个数据包,以便服务器知道将来所有数据包的发送位置。
但TCP和UDP之间还存在其他重要差异:
人们常常发现这样的论点,即UDP比TCP更快。这是完全错误的。但是如果数据包丢失,您可能会看到延迟问题,因为TCP会发现数据包丢失并再次发送数据包,并且还会降低线速以减少数据包丢失。使用UDP,您必须自己处理数据包丢失和其他拥塞问题。有些情况比如实时音频,可以放松一些数据包但低延迟很重要。这些是UDP很好的情况,但在大多数其他情况下,TCP更好。
答案 1 :(得分:0)
UDP与TCP不同,我相信使用python,客户端必须要求服务器进行更新。 虽然通过互联网学习和使用不同的通信方式很有趣,但对于python我真的建议坚持使用TCP。
答案 2 :(得分:0)
您不必向服务器请求更新。但由于UDP是无连接的,因此服务器可以在不被询问的情况下发送头部位置。但客户端应该将i-m-alive-packets发送到服务器,但这可能每10秒左右发生一次。