首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中将数据包发送到远程Minecraft Server?

如何在Python中将数据包发送到远程Minecraft Server?
EN

Stack Overflow用户
提问于 2012-03-02 01:18:50
回答 1查看 2.3K关注 0票数 3

大家好,StackOverflow的朋友们。

我正在尝试做一种‘机器人’,它可以连接到一个我的世界经典服务器,发布消息,并可能建立。

无论如何,我在理解如何用python发送数据包,以及如何正确地对它们进行编码方面遇到了一些问题。

这里是我需要发送的数据包,我想发送‘播放器标识’的一个:http://www.minecraftwiki.net/wiki/Classic_server_protocol#Client_.E2.86.92_Server_packets我知道我需要使用套接字,我需要使用struct.pack,但我到底如何发送它?

一个发送登录数据包的示例代码将是非常棒的。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-02 02:35:04

我会让球滚动起来:

代码语言:javascript
运行
复制
import socket
import struct

username = "username_value"
verification_key = "verification_key"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # boilerplate
s.connect(("example.com", 1234))  # adjust accordingly

# now for the packet
# note that the String type is specified as having a length of 64, we'll pad that

packet = ""

packet += struct.pack("B", 1)  # packet type
packet += struct.pack("B", 7)  # protocol version
packet += "%-64s" % username  # magic!
packet += "%-64s" % verification_key
packet += struct.pack("B", 0)  # that unused byte, assuming a NULL byte here

# send what we've crafted
s.send(packet)

如果你从未使用过格式字符串,"%-20s“可能会让你觉得奇怪。从本质上讲..

代码语言:javascript
运行
复制
print "%s" % 5

。。会打印出5 ..

代码语言:javascript
运行
复制
print "%10s" % 5

。。会将输出填充到恰好10个字符的宽度。但是它在右边填充它们,我们想要左边的填充--因此是-

代码语言:javascript
运行
复制
print "%-10s" % s, "<this will be 9 spaces away from the '5'>"

。。玩一玩吧。

如果有什么不清楚的地方,请告诉我。我喜欢你做的事情,让我想起了我以前的一个项目。只不过我没有你这么好的协议规范,幸运的混蛋。;)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9520833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档