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

如何在用Python编写的Minecraft Classic服务器中发送数据包,python,minecraft,Python,Minecraft,我正在设计一个用Python编写的Minecraft经典服务器,但我不知道如何正确发送数据包。我知道如何设置套接字,但我不知道的部分是如何以协议所需的格式发送它们。我了解协议,只是不了解如何在Python中实现它。我真的没有要发布的代码,只有心跳,这与我的问题无关。我已经查看了几个服务器的源代码,但我不了解它们。正如Dan D所述,您可以使用struct.pack按照协议的要求格式化数据。位于的文档中有几个示例 然后,您需要查看数据包结构,其中详细描述了数据包的外观。根据数据包描述,前4个字节需

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

正如Dan D所述,您可以使用struct.pack按照协议的要求格式化数据。位于的文档中有几个示例

然后,您需要查看数据包结构,其中详细描述了数据包的外观。根据数据包描述,前4个字节需要一个struct.pack格式的字符串,看起来像“Bbh”

struct.pack("Bbh", 0, 1, 7)
对于id为1且协议版本为7的播放器标识数据包。您必须使用数据包的其余64字节字符串+1024字节二进制部分完成此操作,这两部分都带有填充

EDIT:刚刚记住的Python可能不是本机的big-endian,因此您可能也希望将其放入格式字符串中

struct.pack("!Bbh", 0, 1, 7)
通过查看myne2服务器的源代码,您可以找到数据包格式的示例以及如何处理它们


还有一些非常有用的信息。

使用
struct.pack()
。[请注意,已经存在多个python minecraft服务器。(我的愿望清单上是一个python minecraft客户端)。]@DanD。我意识到其他人的存在。我已经查看了几个服务器的源代码,但我不了解它们。你能把关于
struct.pack()
的事情写进一个完整的答案吗?