2013-05-09 100 views
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只包含一个空字符串;

+0

print_r($ data);应该返回伪造文本,因为这是6字节编码,由'/'分隔(ip:4字节,端口:2字节) – user215867 2013-05-09 08:42:19

回答

0

错误很小;必须有5 * \ xFF标签;我只用了4.