好吧 - 我被打了。在同一系统上运行时,套接字服务器/客户端冲突
我有一个使用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