【问题标题】:Building a packet to send to a minecraft server - python构建要发送到我的世界服务器的数据包 - python
【发布时间】:2013-05-05 09:31:28
【问题描述】:

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

【问题讨论】:

  • 您共享的代码在数据包形成时工作正常,因此问题出在其他地方。

标签: python minecraft


【解决方案1】:

结构体的打包函数要求用户名和验证键是字节对象。

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

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

应该可以解决你的问题。

【讨论】:

  • hmmm,在这种情况下,您的变量之一已经被编码为字节对象。问题是哪一个,您可以通过打印它们来检查。如果它们是一个字节对象,它们看起来就像这个 b'是一个字节'。在这种情况下,您不需要对其进行编码。
猜你喜欢
  • 2020-09-03
  • 2014-01-16
  • 2012-09-24
  • 2021-07-09
  • 2019-02-03
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多