我已经尝试了几个小时(字面意思)将数据包发送到Minecraft服务器。
http://www.minecraftwiki.net/wiki/Classic_Server_Protocol#Packet_Protocol
(玩家识别位)。
但我收到错误'struct.error:'s'的参数必须是一个字节对象'。
这是代码:
packet = struct.pack('bb8s110sb', 0, 7, username, verification_key, 0) # packet type
s.send(packet)
如何成功将播放器识别包发送到服务器?
非常感谢任何帮助,我将无法在发布此帖后至少12小时内回复任何答案。 + Rep代表任何帮助,谢谢:)
答案 0 :(得分:0)
struct的pack函数要求username和verification_key是字节对象。
在python 3中定义类似字符串'asdf'时,它使用unicode进行编码。为了支持许多编码,python具有byte对象。要将字符串转换为字节对象,只需使用所需的编码作为参数调用其编码方法。在这种情况下,'ascii'将适用于您的两个变量,
packet = struct.pack('bb8s110sb',0,7,username.encode('ascii'),verification_key.encode('ascii'),0)
应该解决你的问题。