1

我正在使用 fsockopen 和 fwrite 发送和接收数据。我的应用程序收到了正确的响应,但似乎要等到某种超时才能继续。我怀疑在它完成接收响应后我没有正确关闭连接,这解释了等待。有人可以看看我的代码吗?

private static function Send($URL, $Data) {
            $server = parse_url($URL, PHP_URL_HOST);
            $port = parse_url($URL, PHP_URL_PORT);

            // If the parsing the port information fails, we will assume it's on a default port.
            // As such, we'll set the port in the switch below.
            if($port == null) {
                switch(parse_url($URL, PHP_URL_SCHEME)) {
                    case "HTTP":
                        $port = 80;
                        break;
                    case "HTTPS":
                        $port = 443;
                        break;

                }
            }

            // Check if we are using a proxy (debug configuration typically).
            if(\HTTP\HTTPRequests::ProxyEnabled) {
                $server = \HTTP\HTTPRequests::ProxyServer;
                $port = \HTTP\HTTPRequests::ProxyPort;
            }

            // Open a connection to the server.
            $connection = fsockopen($server, $port, $errno, $errstr);
            if (!$connection) {
                die("OMG Ponies!");
            }

            fwrite($connection, $Data);

            $response = "";
            while (!feof($connection)) {
                $response .= fgets($connection);
            }
            fclose($connection);

            return $response;
        }
4

1 回答 1

1

问题在于这一行:

while (!feof($connection)) {

套接字是流;除非对方关闭连接,feof否则永远不会返回true,您的脚本最终会超时。

要执行有序关闭,双方必须关闭连接端;他们中的一个可以这样做作为对另一个的回应,但很明显,如果两者都在等待另一个先关闭,那么没有人会这样做。

对方程序输出东西后是否关闭连接?似乎没有。

于 2012-04-10T23:40:01.457 回答