如何在用Python编写的Minecraft Classic服务器中发送数据包

时间:2012-01-18 00:05:47

标签: python minecraft

我正在设计一个用Python编写的Minecraft Classic服务器,但我不知道如何正确发送数据包。我知道如何设置套接字,但我不知道的部分是如何以协议所需的格式发送它们。我理解协议,而不是如何在Python中实现它。我真的没有代码发布,只有心跳,这与我的问题无关。我查看了几个服务器的来源,但我不理解它们。

1 个答案:

答案 0 :(得分:4)

正如Dan D.所提到的,您可以使用struct.pack按照协议的要求格式化数据。 http://docs.python.org/library/struct.html上的文档有几个例子。

然后,您需要查看http://www.minecraftwiki.net/wiki/Classic_Server_Protocol#Packet_Protocol处的数据包结构,其中详细描述了数据包的外观。根据数据包描述,您需要一个struct.pack格式字符串,其前4个字节的内容类似于“Bbh”。

struct.pack("Bbh", 0, 1, 7)

对于标识为1且协议版本为7的播放器标识数据包。您必须使用包的其余部分完成此操作64字节字符串+ 1024字节二进制部分,两者都使用填充。

编辑:记住Python可能不是原生的大端,所以你可能也想把它扔进格式字符串。

struct.pack("!Bbh", 0, 1, 7)

您可以通过查看myne2服务器的来源找到数据包格式的示例以及如何处理它们

https://bitbucket.org/andrewgodwin/myne2/src/236deac8cd2f/myne/core/constants.py

https://bitbucket.org/andrewgodwin/myne2/src/236deac8cd2f/myne/core/packeter.py

python module of the week page for struct也有一些非常有用的信息。