ZH:RCON

RCON是一种允许服务器管理员远程执行的协议. 它在1.9-pre4中引入，基本上是Minecraft上一个Source RCON协议的实现.

服务端配置
enable-rcon=true rcon.password= rcon.port=<1-65535> broadcast-rcon-to-ops=false

默认端口为25575.

数据包格式
与Minecraft协议相反，整型是小字节序的.

响应将发送回与你发送的相同请求ID. 在认证失败时（如你的登录不正确，或者你未登录就尝试发送命令），请求ID则将设为

3：登录
传出负载：密码.

如果服务器返回具有相同请求ID的数据包，则认证成功（注意：数据包类型是2，而不是3）. 如果你获得的请求ID为-1，则认证失败（密码错误）.

2：命令
传出负载应该是要运行的命令，如

0：命令响应
输入的负载是命令输出，尽管许多命令不返回内容，也无法检测未知命令.

命令输出可能会被拆分为多个数据包，每个包含4096个字节（最后一个数据包较少）. 每个数据包都包含部分负载（以及两个字节的填充）. 发送的最后一个数据包是输出末尾.

碎片
最大C->S数据包负载长度：1446 （总计：1460） - 已过时？

最大S->C数据包负载长度：4096 （总计：4110）

Minecraft服务端可以在多个数据包件分散响应. 并没有简单的方法来知道最后一个响应数据包的接收时间. 方法包括：


 * 1) 等待至我们接收到负载长度<4096的数据包（不是100％可靠！）
 * 2) 等待n秒
 * 3) 发送两个命令包； 第二个命令触发来自服务器的具有相同请求ID的响应，由此我们知道我们已经收到了对第一个命令的完整响应.
 * 4) * 第二个数据包应该使用不会产生碎片输出的命令
 * 5) * 另一种是让第二个C->S数据包使用无效的类型（例如100）. 服务器将使用负载设置为“Unknown request 100”的“Command response”数据包进行响应.

示例实现

 * https://godoc.org/github.com/Tnze/go-mc/net#RCONConn （Go，客户端和服务端）
 * https://github.com/barneygale/MCRcon （Python，基础，同步）
 * https://github.com/MrReacher/async-mcrcon （Python 3.5+，基础，异步）
 * https://gist.github.com/1292348 （PHP，基础，同步）
 * https://github.com/tehbeard/node-rcon （node.js，基础，异步）
 * https://bitbucket.org/jyc/rcon.js （RingoJS，同步，BSD协议）
 * https://bitbucket.org/jyc/rcon （PHP，同步，BSD协议）
 * https://github.com/A2PLab/minelib （Scala，基础）
 * https://github.com/tiiffi/mcrcon （C，同步，zlib/libpng协议）
 * https://github.com/micvbang/pocketmine-rcon （Go，基础，同步）
 * https://github.com/SommerEngineering/MinecraftServerRCONSharp （.NET/Mono，C#，线程安全）
 * https://github.com/CatCoderr/JRcon （Java，异步，AGPL-3.0协议）
 * https://github.com/coNQP/mcipc （Python 3.6）