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

时间:2012-06-14 18:07:53

标签: php sockets fread

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

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

非常感谢你的时间。

2 个答案:

答案 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);

我已在实时环境中测试了此代码,但它可以正常运行。