在同一系统上运行时出现套接字服务器/客户端冲突

时间:2009-12-01 06:28:38

标签: sockets client-server php

好的 - 我被殴打了。

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

2 个答案:

答案 0 :(得分:0)

对我来说,你至少缺少socket_connect()

答案 1 :(得分:0)

我将接收类型更改为“PHP_NORMAL_READ”,并确保在每次写入时都发送“\ n”。

这似乎解决了我正在目睹的问题。我的客户端和服务器现在正在正常通信。