我使用某些API通过发送包含fwrite()
的数据包来获取远程服务器的信息,然后按fread()
读取返回的值。大部分时间它都能正常工作,但每5到10次,它将从fread()
返回一个空字符串。这是我使用的代码:
public function getInfo()
{
@fwrite($this->rSocket, $this->createPacket('i'));
$inforead = fread($this->rSocket, 999);
if(strlen($inforead) >= 28)
{
$inforead = substr($inforead, 11);
$aDetails['password'] = (integer) ord(substr($inforead, 0, 1));
$aDetails['players'] = (integer) $this->toInteger(substr($inforead, 1, 2));
$aDetails['maxplayers'] = (integer) $this->toInteger(substr($inforead, 3, 2));
$inforead = substr($inforead, 5);
$iStrlen = ord(substr($inforead, 0, 4));
if(!$iStrlen) return -1;
$aDetails['hostname'] = (string) substr($inforead, 4, $iStrlen);
$inforead = substr($inforead, 4+$iStrlen);
$iStrlen = ord(substr($inforead, 0, 4));
$aDetails['gamemode'] = (string) substr($inforead, 4, $iStrlen);
$inforead = substr($inforead, 4+$iStrlen);
$iStrlen = ord(substr($inforead, 0, 4));
$aDetails['mapname'] = (string) substr($inforead, 4, $iStrlen);
}
return $aDetails;
}
我还调试了fwrite()
,它似乎返回写入的字节数而不是false,这意味着错误不在fwrite()
中。我的代码或服务器的问题是否无法提供信息?
构造函数打开套接字,因此在这里不可见。