我有一個運行Apache 2.2.3和PHP 5.4.8的CentOS 5.9框。通過apache運行stream_socket_server&client時連接被拒絕
我試圖設置一個使用PHP的服務器,以便另一臺服務器上的C應用程序可以輕鬆地從我們的Web服務器上查詢一些信息。
我也希望能夠在本地向服務器發送數據包 - 從同一個網絡服務器 - 方便地控制服務器。
問題是,當服務器和客戶端都通過瀏覽器/ apache訪問時,客戶端從未設法連接。當我通過CLI執行客戶端或服務器時,它突然生效。
我在Ubuntu工具箱上測試了相同的代碼,它沒有任何問題。
對於測試/調試,服務器在30秒後自動關閉。
澄清:
- 瀏覽器去serverstart.php
- 瀏覽器去client.php
- 結果:client.php保持加載,直到serverstart.php命中30秒關機,然後迴應連接拒絕
- 瀏覽器轉到serverstart2.php,它使用exec,passthru或system('php -f serverstart.php');
- 瀏覽器轉到client.php
- 結果:不起作用。客戶端掛起,直到serverstart.php在30秒後關閉。
- CLI:PHP -f serverstart.php
- 瀏覽器去client.php
- 結果:工作
- 瀏覽器去serverstart。 php
- CLI:PHP -f client.php
- 結果:工作
- 瀏覽器去serverstart.php
- CLI:回聲 「測試」 |數控本地主機8000
- 結果:工作
客戶端。PHP
<?php
$client = stream_socket_client("tcp://localhost:8000", $errno, $errorMessage);
if ($client === false) {
echo "Failed to connect: $errorMessage";
}
fwrite($client, "This is a test" . PHP_EOL);
echo stream_get_contents($client);
fclose($client);
serverstart.php
<?PHP
$server = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errorMessage);
if ($server === false) {
throw new UnexpectedValueException("Could not bind to socket: $errorMessage");
}
$start = microtime(true);
while((microtime(true) - $start) < 30) { // 30 second timeout
$client = @stream_socket_accept($server, 1);
if ($client) {
echo 'Client Found';
$message = fgets($client, 1024);
echo 'Client said:' . $message;
fwrite($client, 'The local time is ' . date('n/j/Y g:i a') . PHP_EOL);
fclose($client);
}
}
任何人有任何想法什麼怎麼回事,我怎麼能得到它的工作,通過瀏覽器調用兩者兼而有之?
編輯:我想補充說,沒有防火牆正在運行的框。 iptables空白,SELinux被禁用。