Конфликт Socket Server / Client при работе в той же системе - PullRequest
0 голосов
/ 01 декабря 2009

Ладно - меня избили.

У меня есть сервер (PHP-CLI), написанный с использованием функций PHP socket_ *. Я могу просто подключиться к нему с помощью Putty, и он работает как положено.

Однако мой клиент PHP-CLI не работает должным образом. Похоже, что клиент пытается получить сокет от сервера (да, сервер / клиент находятся в одной системе).

Кажется, они соединяются, но если у меня настроен клиент на получение приветственного сообщения от сервера, он просто останавливается. Если у меня есть клиент пишет после подключения, сервер, кажется, отправляет все, и клиент начинает читать правильно - но затем «socket_read» сервера возвращает false (что означает ошибку), но с сообщением об ошибке «Операция завершена успешно».

Вот мой общий алгоритм:

SERVER

$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 голосов
/ 04 декабря 2009

Я изменил тип приема на "PHP_NORMAL_READ" и убедился, что отправляю "\ n" при каждой записи.

Кажется, это излечило проблему, свидетелем которой я был. Мой клиент и сервер теперь правильно обмениваются данными.

0 голосов
/ 01 декабря 2009

Мне кажется, что вы пропустили хотя бы socket_connect ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...