2009-12-01 56 views
0

好吧 - 我被打了。在同一系統上運行時,套接字服務器/客戶端衝突

我有一個使用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"; 

回答

0

我將接收類型更改爲「PHP_NORMAL_READ」,並確保在每次寫入時發送「\ n」。

這似乎解決了我目睹的問題。我的客戶端和服務器現在可以正常通信。

0

在我看來,你缺少至少socket_connect()

+0

我認爲它已被添加。添加socket_connect()是否解決了這個問題? – bobber205 2009-12-01 06:52:13

+0

它在代碼中 - 只是不在問題中。該代碼不是直接複製/粘貼 - 更多的算法/僞代碼 – ChronoFish 2009-12-01 14:00:11

相關問題