2009-12-01 78 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

相关问题