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

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

解决方法:

正如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)

对于ID为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还有一些非常有用的信息.

上一篇:Python自动发邮件-yagmail库


下一篇:从命令行Python / C启动Minecraft