编辑:对不起,意外发布与不同问题的标题。固定。无法读取套接字(挂起)
嗨,
我使用PHP连接到本地的C++ socket服务器,以保持一个Web应用程序和几个守护进程之间的状态。我可以将数据发送到套接字服务器,但不能从它接收;它只会阻止socket_read()
并无限期地挂起。我是否忘记了一些愚蠢的东西(比如空字符或换行符的不同组合)?在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不想玩的很好。任何想法/建议表示赞赏。
什么套接字库你使用C + +或你创建自己的(* nix或Windows以及)?另外,错误是什么?它是否永远阻塞袜子>>数据或更多的事情发生?额外的笔记;我在一段时间内没有使用C++服务器的PHP通信,但是您的服务器是否向套接字发送了终止消息,以便它告诉PHP停止阅读?您的循环将以PHP持续读取,直到服务器告诉它套接字完成发送信息;它不是一个实时更新的头脑(因为它在完全收集并存储在你的var后打印数据)。 – RageD 2010-11-09 19:38:11
这可能只是从你的代码中丢失,但是你是否先'socket_create' $ sock? – netcoder 2010-11-09 19:41:33
另外,我没有在你的代码中看到这个,但是当你的循环完成时你需要打印$ str。 – RageD 2010-11-09 19:44:50