2015-12-08 71 views
2

我正在服務器列表查看器 和有人告訴我,我應該使用UdpSocket發送數據到主服務器並從它接收數據(在這種情況下爲MW2-IW4遊戲)發送並獲取來自udpsocket的數據

所以這是命令或插座使用

"\xff\xff\xff\getservers IW4 <MASTERSERVERPORTHERE> full empty\x00" 

,所以我試圖用這個代碼

<?php 
    $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 

    $msg = "\xff\xff\xff\getservers IW4 <MASTERSERVERPORT> full empty\x00"; 
    $len = strlen($msg); 

    socket_sendto($sock, $msg, $len, 0, 'MASTERSERVERIP' , 1223); 
    socket_close($sock); 
?> 

工作,但沒有收到任何數據,剛剛起步的36號... PS:

i don't know much things about sockets. 

回答

0

只要使用的fsockopen這是一個容易得多,

$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr); 

if (!$fp) echo "ERROR: $errno - $errstr<br />\n"; 

fwrite($fp, "\n"); 
while (!feof($fp)) { 
    echo fgets($fp, 128); 
} 
fclose($fp); 
+1

嗨在那裏,我不明白你的代碼...首先,我應該把我要發送的命令在哪裏?第二件事,什麼是$ errno和$ errstr ..? 謝謝 – Shryder

+1

$ errno和$ errstr處理錯誤等, 你會把你想寫的「fwrite」函數, http://php.net/manual/en/function.fsockopen.php – user3015445

1

我想通了,如何做到這一點已有一段時間,記住這個職位,如果有人仍感興趣,這是你如何做到這一點:

<?php 
$ip = "127.0.0.1"; 
$port = 1337; 
$socket = fsockopen('udp://'.$ip, $port); 
stream_set_blocking($socket, 0); 
stream_set_timeout($socket, 1); //1 = timeout 

fwrite($socket, "YOUR UDP COMMAND HERE\n"); 

$time=time()+1; //1=timeout 
$returned = ""; 
while($time > time()) { 
    $returned .= fgets($socket); 
} 


echo($returned); // the returned value 
@fclose($socket); //we are done, so better close it. 
?>