Aynı sistem üzerinde çalışan Soket Sunucu / İstemci çatışma sırasında

2 Cevap php

- Tamam ben dayak ediyorum.

PHP'nin socket_ * fonksiyonlarını kullanarak yazılmış bir (PHP-CLI) sunucusu var. Ben Macun kullanarak kendisine sadece iyi bağlanabilir ve beklendiği gibi çalışır.

Ancak benim PHP-CLI istemci düzgün çalışmıyor. Istemci sunucu soketi (evet sunucu / istemci aynı sistem üzerinde) kapmak için çalışıyor gibi görünüyor.

Onlar bağlamak gibi görünüyor, ama yok ben sadece sadece duraklara sunucunun hoşgeldin mesajı almak üzere ayarlanmış müşteri varsa. Ben bağladıktan sonra istemci yazma varsa, sunucu her şeyi göndermek gibi görünüyor, ve müşteri doğru okumaya başlar - ama sonra sunucunun "socket_read" (bir hata anlam) false döndürür ama hata mesajı ile "işlemi başarıyla tamamlandı".

İşte benim genel algoritması:

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");

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";

2 Cevap

Ben almak tipini "PHP_NORMAL_READ" değiştirdi ve ben her yazıp "\ n" yolluyorum emin yaptı.

Bu benim tanık oldu sorununu tedavi gibi görünüyor. Benim istemci ve sunucu artık düzgün iletişim halindeyiz.

En az socket_connect eksik () olan görünüyor bana