我在一个德国论坛上发现了这个工作代码:
<?php
$fp = fsockopen('176.9.59.135', 25565, $errno, $errstr, 4) or die('Verbindung fehlgeschlagen!');
fwrite($fp, "'xFE");
$answer = fread($fp, 256);
if ($answer[0] != "'xFF") {
die ('Anfrage fehlgeschlagen!');
}
$text = substr($answer, 3);
$text = mb_convert_encoding($text, 'auto', 'UCS-2');
$parts = explode("'xA7", $text);
?>
<?php echo $parts[0] . ' (' . $parts[1] . '/' . $parts[2] . ')'; ?>
结果显示有多少玩家在线。我想知道3、4和5行发生了什么:
fwrite($fp, "'xFE");
$answer = fread($fp, 256);
if ($answer[0] != "'xFF") {
我在哪里知道我需要把什么写进插座(比如第3行)?我用wireshark嗅探了包含所有信息的结果包。。。如何才能像Wireshark一样回声数据?
当您调用fwrite()
时,您正在向处理程序写入一些内容。在这种情况下,您正在向连接到服务器的套接字进行写入。xFE
是十六进制的FE
值(十进制为254)。
然后你打电话给fread()
。这将读取与处理程序关联的响应。在这种情况下,您正在读取服务器的响应数据。
if ($answer[0] != "'xFF") {
die ('Anfrage fehlgeschlagen!');
}
此代码检查服务器响应数据的第一个字节是否不是FF
(十进制255)。例如,如果服务器发送0F
,则该过程结束(die())
;
我不熟悉Minecraft Server的状态,但我的建议是检查这个类是否有效。该代码已记录在案。