2013-02-28 80 views
1

我正在檢查端口9998上的服務。爲此,我使用了fsockopen()函數。檢查服務fsockopen()

像這樣:

$host = "1.1.1.1"; 
$port = "9998"; 
$checkconn = fsockopen($host, $port, $errno, $errstr, 1); 
if($checkconn >= 1){ 
echo 'ok'; 
} else { 
echo "$errstr"; 
} 

它總是返回「連接超時 - 110」,但端口是開放的,有服務運行在那裏。

如果我更改端口(如80),它會返回成功,但爲什麼不在9998端口?

+1

防火牆上非標準端口阻止傳出連接? – 2013-02-28 23:22:56

+0

我不這麼認爲,無論如何,我該如何檢查? – Darkeden 2013-02-28 23:54:34

回答

2

1秒連接超時不是很長。即使主機/端口有效,網絡滯後也足以觸發。我建議使用至少2.5 - 5秒。

此外,您應該檢查fsockopen()的結果FALSE而不是< 1以瞭解其何時失敗。

試試這個:

$host = "1.1.1.1"; 
$port = "9998"; 
$checkconn = fsockopen($host, $port, $errno, $errstr, 5); 
if(!$checkconn){ 
    echo "($errno) $errstr"; 
} else { 
    echo 'ok'; 
} 
+0

我試圖檢查之前的FALSE值和更高的超時(如10),但它從來沒有工作......我總是得到相同的休止「連接超時」 – Darkeden 2013-03-01 22:49:02