1 <?php2

3 /**4 * Minecraft服务器状态查询5 * @作者 Julian Spravil Git地址:https://github.com/FunnyItsElmo6 * @本库免费使用,但不要删除作者和版权。8 */

9 classMinecraftServerStatus {10

11 private $timeout;12

13 public function __construct($timeout = 2) {14 $this->timeout = $timeout;15 }16

17 public function getStatus($host = ‘127.0.0.1‘, $version = ‘1.7.*‘ , $port = 25565) {18

19 if (substr_count($host , ‘.‘) != 4) $host = gethostbyname($host);20

21 $serverdata = array();22 $serverdata[‘hostname‘] = $host;23 $serverdata[‘version‘] = false;24 $serverdata[‘protocol‘] = false;25 $serverdata[‘players‘] = false;26 $serverdata[‘maxplayers‘] = false;27 $serverdata[‘motd‘] = false;28 $serverdata[‘motd_raw‘] = false;29 $serverdata[‘favicon‘] = false;30 $serverdata[‘ping‘] = false;31

32 $socket = $this->connect($host, $port);33

34 if(!$socket) {35 return false;36 }37

38 if(preg_match(‘/1.7|1.8/‘,$version)) {39

40 $start = microtime(true);41

42 $handshake = pack(‘cccca*‘, hexdec(strlen($host)), 0, 0x04, strlen($host), $host).pack(‘nc‘, $port, 0x01);43

44 socket_send($socket, $handshake, strlen($handshake), 0); //give the server a high five

45 socket_send($socket, "\x01\x00", 2, 0);46 socket_read( $socket, 1);47

48 $ping = round((microtime(true)-$start)*1000); //calculate the high five duration

49

50 $packetlength = $this->read_packet_length($socket);51

52 if($packetlength < 10) {53 return false;54 }55

56 socket_read($socket, 1);57

58 $packetlength = $this->read_packet_length($socket);59

60 $data = socket_read($socket, $packetlength,PHP_NORMAL_READ);61

62 if(!$data) {63 return false;64 }65

66 $data = json_decode($data);67

68 $serverdata[‘version‘] = $data->version->name;69 $serverdata[‘protocol‘] = $data->version->protocol;70 $serverdata[‘players‘] = $data->players->online;71 $serverdata[‘maxplayers‘] = $data->players->max;72

73 $motd = $data->description;74 $motd = preg_replace("/(§.)/", "",$motd);75 $motd = preg_replace("/[^[:alnum:][:punct:] ]/", "", $motd);76

77 $serverdata[‘motd‘] = $motd;78 $serverdata[‘motd_raw‘] = $data->description;79 $serverdata[‘favicon‘] = $data->favicon;80 $serverdata[‘ping‘] = $ping;81

82 } else{83

84 $start = microtime(true);85

86 socket_send($socket, "\xFE\x01", 2, 0);87 $length = socket_recv($socket, $data, 512, 0);88

89 $ping = round((microtime(true)-$start)*1000);//calculate the high five duration

90

91 if($length < 4 || $data[0] != "\xFF") {92 return false;93 }94

95 $motd = "";96 $motdraw = "";97

98 //Evaluate the received data

99 if (substr((String)$data, 3, 5) == "\x00\xa7\x00\x31\x00"){100

101 $result = explode("\x00", mb_convert_encoding(substr((String)$data, 15), ‘UTF-8‘, ‘UCS-2‘));102 $motd = $result[1];103 $motdraw = $motd;104

105 } else{106

107 $result = explode(‘§‘, mb_convert_encoding(substr((String)$data, 3), ‘UTF-8‘, ‘UCS-2‘));108 foreach ($result as $key => $string) {109 if($key != sizeof($result)-1 && $key != sizeof($result)-2 && $key != 0) {110 $motd .= ‘§‘.$string;111 }112 }113 $motdraw = $motd;114 }115

116 $motd = preg_replace("/(§.)/", "", $motd);117 $motd = preg_replace("/[^[:alnum:][:punct:] ]/", "", $motd); //Remove all special characters from a string

118

119 $serverdata[‘version‘] = $result[0];120 $serverdata[‘players‘] = $result[sizeof($result)-2];121 $serverdata[‘maxplayers‘] = $result[sizeof($result)-1];122 $serverdata[‘motd‘] = $motd;123 $serverdata[‘motd_raw‘] = $motdraw;124 $serverdata[‘ping‘] = $ping;125

126 }127

128 $this->disconnect($socket);129

130 return $serverdata;131

132 }133

134 private function connect($host, $port) {135 $socket = socket_create(AF_INET, SOCK_STREAM,SOL_TCP);136 socket_connect($socket, $host, $port);137 return $socket;138 }139

140 private function disconnect($socket) {141 if($socket != null) {142 socket_close($socket);143 }144 }145

146 private function read_packet_length($socket) {147 $a = 0;148 $b = 0;149 while(true) {150 $c = socket_read($socket, 1);151 if(!$c) {152 return 0;153 }154 $c = Ord($c);155 $a |= ($c & 0x7F) << $b++ * 7;156 if( $b > 5) {157 return false;158 }159 if(($c & 0x80) != 128) {160 break;161 }162 }163 return $a;164 }165

166 }167 ?>

mc服务器状态查询php,PHP下查询游戏《Minecraft》多人游戏 服务器的人数。相关推荐

  1. python 网络服务器框架_Django是Python下的一款网络服务器框架

    Django是Python下的一款网络服务器框架.Python下有许多款不同的框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django.虽然Django之于Pytho ...

  2. 动视服务器状态,《使命召唤12》A.B.C服务器错误不用怕 动视给你支招

    原标题: <使命召唤12>A.B.C服务器错误不用怕 动视给你支招 全球玩家此刻都已经开始<使命召唤12:黑色行动3(Call of Duty: Black Ops 3)>的激 ...

  3. 腾讯服务器状态异常是怎么回事啊,腾讯云服务器网络异常怎么办

    腾讯 检查网络配置 在两台主机上运行IPCONFIG命令,以确保它们使用的IP地址都在预期范围内.单独运行IPCONFIG命令可以显示分配给每个网络适配器的IP地址.子网掩码和默认网关.如果这些值没有 ...

  4. 流星蝴蝶剑服务器状态,流星蝴蝶剑什么是数据互通 哪些服务器会进行互通

    在今天也就是11月7日,流星蝴蝶剑手游经过一个有史以来最大程度的维护更新之后,新武器"唐刀"和玩家的新外观.新挂饰和双11活动都已经全部上线.那其中更是出现一个"数据互通 ...

  5. 【游戏客户端与服务器面试题】-- 2022年最新游戏客户端与服务器面试(lua篇持续更新)

    [游戏客户端与服务器面试题干货]-- 2022年度最新游戏客户端面试干货(lua篇) 文章目录 一.Lua的8种数据类型 (1) nil 类型 (2) boolean类型 (3) number类型 1 ...

  6. 服务器架设了网站还能架设游戏吗,云服务器可以架设游戏吗

    云服务器可以架设游戏吗 内容精选 换一换 可以.您可以在云服务器关机后,对云服务器变更规格.温馨提醒:目前包周期云服务器只支持升级配置. 华为云VR云渲游平台帮助中心,为用户提供产品简介.快速入门.用 ...

  7. 方舟生存进化服务器不稳定,win10玩方舟生存进化游戏一进服务器就自动闪退如何解决...

    很多用户在空闲的时候都喜欢在电脑中玩各种游戏,不过可能会碰到一些故障,例如有win10系统用户在电脑中中玩方舟生存进化游戏的时候,发现一进服务器就自动闪退,让很多玩家都束手无策,接下来给大家演示一下w ...

  8. 服务器自动登录 linux,linux下如何自动登录远程服务器?

    mount到服务器.需要用到expect和smbmount,脚本如下 #!/usr/bin/expect #auto mountserver set timeout -1 set password & ...

  9. mac 电脑找不到服务器 dns 地址,MAC OS下如何快速设置DNS服务器地址

    楼主你好! 介绍以下Mac OS X DNS设置方法: 1.点击桌面顶部状态栏里的苹果图标,在菜单里选择"系统偏好设置". 2.点击互联网与无线下的"网络". ...

最新文章

  1. 网络中找不到指定的计算机名,技术编辑为你解说网络共享找不到计算机名字,网络共享找不到对方电脑的解决办法...
  2. phpcms V9 相关阅读/相关文章
  3. Hibernate 系列教程9-自关联
  4. 006 kkrunchy_Ryd之类FSG压缩壳
  5. android在视频上放view,android在SurfaceView上播放视频
  6. 80后游戏美术:这十年总在挣扎着做些更有意思的事儿
  7. MapReduce案例-wordcount-准备工作
  8. js中的对象、原型链机制、构造函数
  9. 找出两个字符串中所有共同的字符_面试中的两个字符串问题竟给我整懵了?!| 原力计划...
  10. mysql中dml语言_八、mysql DML语言
  11. php打印订单,WooCommerce: 打印订单
  12. 每日命令之vim简单使用
  13. 编程入门先学什么python-编程零基础应当如何开始学习 Python?
  14. 中国工业企业数据库(2015年)
  15. w7计算机应用放大按键,设置Win7放大功能 老年人用电脑更方便
  16. 网络流dinic算法
  17. Mac 更新环境变量
  18. H5拍照、选择图片上传组件核心
  19. 解决vue和vue-template-compiler版本不一致问题
  20. HTML文件均以()标记符开始,助理电子商务师教程网页制作

热门文章

  1. aide java 线程类_aide_Java常用关键字、方法使用实例
  2. springboot实战 获取spring上下文的4种方式
  3. Vue打包之后会出现.map文件用处
  4. SqlTransaction——事务详解
  5. java combinationsum_Leecode39 combination-sum
  6. ssl java 客户端_Java SSL生成客户端和服务端crt文件
  7. springboot默认数据源如何设置连接数_spring boot基于DRUID数据源密码加密及数据源监控实现...
  8. mongodb jar包_MongoDB是什么?看完你就知道了!
  9. 求s = k ! + n ! / m !的值
  10. 2021重庆江北中学高考成绩查询,重庆江北中学校2021年排名