我使用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;
}
答案 0 :(得分:1)
问题在于这一行:
while (!feof($connection)) {
套接字是流;除非另一方首先关闭连接,否则feof
永远不会返回true
,您的脚本最终会超时。
要执行有序关机,双方必须关闭其连接的结束; 他们中的一个可以作为对另一个人的回应,但很明显,如果两个人都在等待另一个先关闭,那么就没有人会这样做。
输出后,另一侧的程序是否关闭了连接?似乎没有。