Я использую PHP для подключения к локальному серверу сокетов C++, чтобы сохранять состояние между веб-приложением и парой демонов. Я могу отправлять данные на сокет-сервер, но не получать от него; он просто блокируется на socket_read()
и зависает на неопределенный срок. Я забыл что-то глупое (например, символ NULL или другую комбинацию символов новой строки)? PHP ниже:
socket_connect($sock, $addr, $port);
socket_write($sock, 'Hello world');
$str = '';
while($resp = socket_read($sock, 1000))
$str .= $resp;
socket_close($sock);
die("Server said: {$str}");
Соответствующая часть сервера сокетов приведена ниже (обратите внимание, что операторы <<
и >>
перегружены):
std::string data;
sock >> data;
sock << data << std::endl;
Где >>
звонит Socket::recv(std::string&)
, а >>
звонит Socket::send(const std::string&)
.
Это прекрасно работает (например) через telnet, но PHP не хочет работать хорошо. Любые мысли/предложения приветствуются.
strpos($str, "\0")
послеsock << data << "\0"
, он его не уловит. Есть предположения? 09.11.2010strpos
с\0
при тестировании дает логическое значение false. Вы должны указать другой разделитель, использовать тайм-аут (см. Как установить тайм-аут при чтении сокета?) или закрыть сокет со стороны сервера. 09.11.2010if (strpos($resp, "\n") !== false) break;
08.04.2015