好的 - 我被殴打了。
我有一个使用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");
客户端
$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 :(得分:0)
对我来说,你至少缺少socket_connect()
答案 1 :(得分:0)
我将接收类型更改为“PHP_NORMAL_READ”,并确保在每次写入时都发送“\ n”。
这似乎解决了我正在目睹的问题。我的客户端和服务器现在正在正常通信。