以下是我的套接字连接请求和响应顺序。
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
$connection = socket_connect($socket, $Host, $Port);
$Md5CheckSum = md5($msg);
$WillWait = 'SOAP '. $Md5CheckSum. ' WILL_WAIT'."\n";
socket_write($socket,$WillWait);
socket_write($socket,$msg);
socket_write($socket, SoapSender::$TERM_CHAR);
sleep(1);
$buf = socket_read($socket, 2048);
//socket_write($socket,"&\r\n");
echo "$buf\n";
请有人告诉我如何读取上次socket_write请求后收到的响应。我一整天都在寻找这个答案,但一直无法通过谷歌找到任何帮助。
非常感谢你的时间。
答案 0 :(得分:0)
应该使用两个函数:
stream_set_blocking($socket, true);
和
stream_get_contents($socket);
在流上设置块需要在应用程序继续执行脚本之前返回数据。
如果您没有设置流阻止,有时延迟会导致您的PHP脚本认为没有响应,导致您无法接收数据。
另外,使用stream_get_contents从套接字中拉出。这将默认获取完整缓冲区。
答案 1 :(得分:-1)
正确的方法是使用socket_read,而不是其他人建议的stream_get_contests。
以下是一个例子:
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($sock, "10.197.24.40", "5000");
$request = '{ "request" : { "id" : "some_function_id", "data": "55555555-5"} }';
// We send the request
socket_write($sock,$request);
socket_read($sock,1000000);
socket_close($sock);
我已在实时环境中测试了此代码,但它可以正常运行。