2012-03-07 32 views
2

我有一个脚本,连接到矿井工艺服务器,接收数据包,并发送数据包。Python解析Minecraft包

因此,我发送一个'登录'数据包,并收到'登录'数据包。不幸的是,接收到的登录数据包是编码的(关于编码的信息在这里:http://wiki.vg/Protocol#0x01)。

接收到的登录数据包存储在名为received_login_packet的变量中。我需要解码它,以便我可以获得单独的数据位,例如数据包类型,尺寸等等。去做这件事。

下面是一些代码,如果有帮助:

#encoding the packet to send 
encuserlen = str(len(enc_user)) # enc_user is just my username 
packfmt = '>bih%sshiibBB' % encuserlen 
packetbytes = struct.pack(packfmt, 1, 28, len(data['user']), enc_user, 0, 0, 0, 0, 0, 0) 
s.send(packetbytes) 
time.sleep(2) 
#login packet sent, waited for response 
response = s.recv(1024) #this is the raw login response. 
#it's encoded as detailed above. i want to decode it 

任何帮助,将不胜感激,并请不要犹豫地说,如果它不够清晰。

+0

这还不够清楚。请包括代码示例。 – Will 2012-03-07 14:22:18

+0

还好吗?我添加了一些代码,虽然没有太多需要。大部分所需的信息都在wiki页面中。 – Jack 2012-03-07 14:59:23

回答

0

所以,如果我明白这个权利,你想解码数据包响应,这是一个1024字节,以获得正确的信息。看起来你能够使用struct.pack语句,有类似的语句来解包,如the documentation所示。基本上,它看起来像这样。

packfmt = '>issiibBB' 
output=struct.unpack(packfmt,response) 

而且,我不太相信,你的请求被正确发送,但我会离开,作为一个练习,你要弄清楚如何设置。请参阅format strings

+0

这并不完全正确,但我意识到我的问题并不清楚,它帮助我解决了如何解开它们的问题。 – Jack 2012-03-07 22:07:54

+0

哦,你认为我犯了什么错误?我似乎无法找到它。 :/ – Jack 2012-03-07 22:08:16

+0

@JackBeePee:'packfmt ='> bih%sshiibBB''看起来不太合适...... – PearsonArtPhoto 2012-03-08 01:24:41