0

我已经尝试了几个小时(字面意思)将数据包发送到我的世界服务器。 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 小时内我将无法回复任何答案。+代表任何帮助,谢谢:)

4

1 回答 1

0

struct 的 pack 函数要求 username 和 verify_key 是字节对象。

在 python 3 中,当您定义这样的字符串“asdf”时,它使用 unicode 进行编码。为了支持许多编码,python 有字节对象。要将您的字符串转换为字节对象,您只需使用所需的编码作为参数调用它们的编码方法。在这种情况下,'ascii' 将适用于您的两个变量,所以,

packet = struct.pack('bb8s110sb', 0, 7, username.encode('ascii'), verify_key.encode('ascii'), 0)

应该可以解决您的问题。

于 2013-05-05T01:31:28.207 回答