0
我写了一个脚本来从Enemy Territory的主服务器上获取服务器列表;然而它默默地失败了;我有它的工作;但由于一些未知的原因,它现在不再有了。连接主服务器stream_socket_client
我用这个文档与服务器“交谈”:http://src.gnu-darwin.org/ports/games/masterserver/work/masterserver-0.4.1/docs/PROTOCOLS 这似乎是有效的,因为它以前工作过,它仍然在游戏服务器上工作;这是我的代码:
<?php
// set sv_master1 "etmaster.idsoftware.com"
// set sv_master2 "master0.gamespy.com"
// set sv_master3 "wolfmaster.idsoftware.com"
// set sv_master4 "clanservers.net"
// set sv_master5 "master0.etmaster.net" 213.108.29.23
$host = 'etmaster.idsoftware.com';
$port = '27950';
// $status = chr(255) . chr(255) . chr(255) . chr(255) . chr(0x02) . 'getservers' . chr(0x00);
$status = "\xFF\xFF\xFF\xFFgetservers\x00";
$fp = stream_socket_client("udp://" . $host . ":" . $port, $errno, $errstr, 10);
if (!$fp) {
echo "ERROR: " . $errno . $errstr . "<br>\n";
} else {
fwrite($fp, $status);
//stream_set_timeout($fp, 10); // this is for debugging;
$data = fread($fp, 1024);
fclose($fp);
print_r($data);
}
我试图60秒执行时间(其本地主机),但它仍然无法正常工作...任何帮助表示赞赏!当我检查步骤(以cli)时,花费在fread()上的时间最长;但$ data只包含一个空字符串;
print_r($ data);应该返回伪造文本,因为这是6字节编码,由'/'分隔(ip:4字节,端口:2字节) – user215867 2013-05-09 08:42:19