3

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

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

非常感谢您的时间。

4

2 回答 2

0

应该使用两个函数:

stream_set_blocking($socket, true);

stream_get_contents($socket);

在您的流上设置一个块需要在您的应用程序继续执行脚本之前返回数据。

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

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

于 2012-06-14T18:16:48.913 回答
-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);

我已经在实时环境中测试了这段代码,它可以正常工作。

于 2012-11-29T16:18:25.323 回答