這裏是我的代碼:PHP:插座聽問題
<?php
$host = "127.0.0.1";
$portListen = 1234;
$portSend = 1240;
// create socket
$sSender = socket_create(AF_INET, SOCK_STREAM, 0);
socket_connect($sSender, $host, $portListen);
socket_write($sSender, "test", strlen ("test"));
$sListen = socket_create(AF_INET, SOCK_STREAM, 0);
socket_set_option($sListen, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($sListen, $host, $portSend);
socket_listen($sListen,1);
$dataSock = socket_accept($sListen);
echo socket_read($dataSock, 3, PHP_NORMAL_READ);
// close sockets
socket_close($sSender);
socket_close($sListen);
?>
我送「測試」到另一個應用程序,它接收和發送回「確認」。問題是,我只能做一次。如果我刷新,我得到的地址已經被使用錯誤。我嘗試了php.net上建議的解決方案,但無濟於事。在socket_close()之前試圖socket_shutdown()只給我沒有連接的警告,刷新後會給我一個永無止境的加載。
從我理解的原因套接字沒有立即關閉是因爲仍然有數據在緩衝區中。但正如你所看到的,我明確表示只聽1個連接。另外,我只從我的應用程序發送3個字符,並在此腳本中讀取3個字符。
我在做什麼錯?
編輯:我使用2個套接字的原因是因爲我不能在write()之後偵聽()它給我套接字已經連接錯誤。在write()之後跳過listen()並直接進入read()給我提供無效的參數錯誤。
找到一個更簡單的方法來執行此操作。看看這篇博文。 http://www.christophh.net/2012/07/24/php-socket-programming/ – 2013-12-22 19:30:39