编辑:抱歉,不小心发布了一个不同问题的标题.固定.
大家好,
我正在使用PHP连接到本地C++套接字服务器,以保持Web应用程序和几个守护进程之间的状态.我可以将数据发送到套接字服务器,但不能从它接收; 它只是阻塞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}");
Run Code Online (Sandbox Code Playgroud)
套接字服务器的相关部分如下(注意<<和>>运算符重载):
std::string data;
sock >> data;
sock << data << std::endl;
Run Code Online (Sandbox Code Playgroud)
当>>呼叫Socket::recv(std::string&)和>>通话Socket::send(const std::string&).
这可以从(例如)telnet中正常工作,但PHP不想玩得很好.任何想法/建议表示赞赏.
net*_*der 11
除非另外设置,否则PHP中的套接字(如在大多数编程语言中)默认以阻塞模式打开socket_set_nonblock.
这意味着除非发生超时/错误或收到数据,socket_read否则将永远挂起.
由于您的终止字符似乎是一个新行,请尝试:
while($resp = socket_read($sock, 1000)) {
$str .= $resp;
if (strpos($str, "\n") !== false) break;
}
socket_close($sock);
die("Server said: $str");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9567 次 |
| 最近记录: |