如何读取 php 套接字连接响应


How to read php socket connection response?

以下是我的套接字连接请求和响应顺序。

$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。我整天都在寻找这个答案,但无法通过谷歌找到任何帮助。

非常感谢您的时间。

应使用两个函数:

stream_set_blocking($socket, true);

stream_get_contents($socket);

在流上设置块需要返回数据,然后应用程序才能继续执行脚本。

如果您没有设置流块,有时延迟会导致您的 PHP 脚本认为没有响应,从而导致您无法接收数据。

此外,使用 stream_get_contents 从套接字中拉出。默认情况下,这将获取整个缓冲区。

正确的方法是使用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);

我已经在实时环境中测试了此代码,并且可以正常工作。