方法:
$fp = fsockopen($server, $port, $errno, $errstr ,30);
fputs($fp, $send_all);
stream_set_timeout($fp, 30);
$result = '';
while(!feof($fp)) {
   $result.= fgets($fp,1024);
}
print_r($result);这样虽然能取到数据,可太慢了,得二十多秒。有其它方法能读到数据吗?不要用fread,用fread取不到完整数据。

解决方案 »

  1.   


    我看了一下资料,不太懂fread,fgets它们的原理。
    fread一次性读取所有数据非常快,只是取不到完整的数据,只能取一千多字节。
    while fgets每次取1024的话,就能全部取到。可就非常慢了。是不是每次fgets都是要重新去链接一次,所以循环如果有十几次每次时间叠加就会慢下来?
      

  2.   

    fgets, fread都是不直接参与连接的。数据包到达后会存放在缓冲区,他们读的是本机的缓冲区,所以不会影响速度。
      

  3.   

    fread 读取指定大小的数据块,直到文件结束。如果无法判定文件结束,则会出现等待而导致失败。
    fgets 读取指定大小的数据块,会在遇到换行符是停止读取,直到文件结束获取远程数据,一般用 file_get_contents 就可以了
      

  4.   

    找到原因了。服务器上面MTU包做了限制。http://blog.csdn.net/jjjfew/article/details/6413460