我已经编写/找到了一个 php 脚本,但我不明白为什么它一次有效,而另一次却没有。该脚本连接到游戏服务器并尝试从中获取信息:
$ip = 'MyServer';
$port = 'OurPort';
$connect_ip = "udp://" . $ip;
$connect = fsockopen($connect_ip, $port, $errno, $errstr, 30);
socket_set_timeout ($connect, 1, 000000);
$send = "ÿÿÿÿ" . chr (0x02) . "getstatus";
fputs($connect, $send);
fwrite ($connect, $send);
$output = fread($connect, 1);
if(!empty($output)) {
do {
$status_pre = socket_get_status($connect);
$output = $output . fread($connect, 1);
$status_post = socket_get_status($connect);
} while ($status_pre['unread_bytes'] != $status_post['unread_bytes']);
};
$output = explode ('\\', $output);
var_dump($output);
输出正在工作,例如:
array(149) { [0]=> string(20) "ÿÿÿÿstatusResponse " [1]=> ........ }
我想:让我们正确地把它包装成这样的函数(所有代码都保持不变,除了开始和结束行)。只要它保留在同一个文件中,这仍然有效。但我想我可以把函数“check”放到一个新文件中,然后我得到这个结果:
**status.php**
function check($ip, $port) {
$connect_ip = "udp://" . $ip;
$connect = fsockopen($connect_ip, $port, $errno, $errstr, 30);
socket_set_timeout ($connect, 1, 000000);
$send = "ÿÿÿÿ" . chr (0x02) . "getstatus";
fputs($connect, $send);
fwrite ($connect, $send);
$output = fread($connect, 1);
if(!empty($output)) {
do {
$status_pre = socket_get_status($connect);
$output = $output . fread($connect, 1);
$status_post = socket_get_status($connect);
} while ($status_pre['unread_bytes'] != $status_post['unread_bytes']);
};
$output = explode ('\\', $output);
var_dump($output);
}
**index.php**
include('status.php');
check('MyServer', 'OurPort')
但猜猜怎么了?现在的输出是:
array(1) { [0]=> string(30) "ÿÿÿÿdisconnectÿÿÿÿdisconnect" }
这怎么可能呢?我在这里监督什么?奇怪的 y 是否存在编码问题?