PHP socket_read不返回空字符串''

时间:2013-03-13 11:26:35

标签: php sockets

嗨,下面的socket_read函数有问题,它在读完数据后不返回空字符串''。在第二次调用socket_read()时,它只是挂在那里,页面继续在浏览器中加载而没有返回。 如果服务器关闭连接,它是否必须服务器关闭客户端套接字?感谢

    $json = $_GET['json'];

    /* Get the port for the WWW service. */
    // $service_port = getservbyname('www', 'tcp');
    $service_port = "1111";

    /* Get the IP address for the target host. */
    $address = "192.168.3.5";

    /* Create a TCP/IP socket. */
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
        echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
        die();
    } else {
        //echo "OK.\n";
    }

    //echo "Attempting to connect to '$address' on port '$service_port'...";
    $result = socket_connect($socket, $address, $service_port);
    if ($result === false) {
        echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
        die();
    } else {
        //echo "OK.\n";
    }

    $out = '';

    //echo "Sending HTTP HEAD request...";
    $result = socket_write($socket, $json, strlen($json));

    if ($result === false) {
        echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
        die();
    } else {
        //echo "OK.\n";
    }



    echo socket_read($socket, 2048);
    echo socket_read($socket, 2048);
//  
     // while (socket_read($socket, 2048) !== '') {
        // echo $out;
//       
     // }
//   
     socket_close($socket);

1 个答案:

答案 0 :(得分:1)

是的,这正是我期望它做的 - socket_read()将永远不会返回空字符串,除非你打开它是二进制文件,服务器以'\ 0'响应。

您似乎正在尝试编写HTTP客户端。如果你是,立即停止,抛弃你的代码并阅读Curl扩展。 HTTP不是一个简单的协议,你仍然需要了解很多简单的东西。您正在依靠套接字状态和数据格式来确定数据流 - 但HTTP不使用。

如果你想了解HTTP是如何工作的,那么互联网上有很多文档 - RFC是必须的,但不是一个温和的介绍。如果您的目标是开发应用程序,那么使用curl(甚至HTTP流包装器)。