我正在设计用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还有一些非常有用的信息.
标签:minecraft,python 来源: https://codeday.me/bug/20191101/1986362.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。