好吧 - 我被打了。在同一系統上運行時,套接字服務器/客戶端衝突
我有一個使用PHP的socket_ *函數編寫的(PHP-CLI)服務器。我可以用Putty連接到它,它可以按預期工作。
但是我的PHP-CLI客戶端無法正常工作。看起來客戶端試圖從服務器獲取套接字(是的,服務器/客戶端在同一個系統上)。
他們似乎連接,但如果我有客戶端設置爲只接收服務器的歡迎消息,它只是停滯不前。如果我在連接後寫入客戶端,服務器似乎發送了所有內容,客戶端開始正確讀取 - 但隨後服務器的「socket_read」返回false(意味着錯誤),但出現錯誤消息「操作成功完成」。
這裏是我的一般算法:
服務器
$this->_clientSock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($this->_clientSock, $this->_address, $this->_port); // Port is 50000
socket_listen($this->_clientSock, 5);
$this->_clientMsgSock = socket_accept($this->_clientSock);
$msg ="Welcome";
socket_write($this->_clientMsgSock, $msg, strlen($msg));
do
{
while ($buffer = socket_read($this->_clientMsgSock, $this->_readSize, PHP_NORMAL_READ))
$inMsg .= $buffer;
$msg ="You sent '$inMsg '";
socket_write($this->_clientMsgSock, $msg, strlen($msg));
}while ($msg != "quit");
CLIENT
$this->_serverSock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($this->_serverSock , $this->_address, $this->_port);
socket_write($this->_serverSock , $msg, strlen($msg)); // With this line, the server "socket_read" returns false otherwise the client hangs
while ($buffer = socket_read($this->_serverSock , $this->_readSize, PHP_NORMAL_READ))
$inMsg .= $buffer;
print "The welcome message is $inMsg";
我認爲它已被添加。添加socket_connect()是否解決了這個問題? – bobber205 2009-12-01 06:52:13
它在代碼中 - 只是不在問題中。該代碼不是直接複製/粘貼 - 更多的算法/僞代碼 – ChronoFish 2009-12-01 14:00:11