stream_socket_client()无法正常工作并忽略超时

时间:2014-08-13 15:27:06

标签: php sockets

我正在尝试从PHP执行stream_socket_client()以从Windows接收数据。这是我的环境:


Localhost :Windows 8和PHP 5.3.8。 脚本完美无缺,并且持续25秒。 Windows Telnet :从Windows Telnet客户端,它可以正常工作。我可以从服务器接收数据。 外部服务器:带有PHP 5.3.3的centOS。脚本需要5分钟到超时。 内部服务器:带有PHP 5.3.3的centOS。这段经文永远不会出现。

注意:要使内部服务器正常工作,$address变量将更改为192.168.0.7

我的问题更多的是我应该寻找什么?我应该担心5.3.3 Vs 5.3.8吗?或者Linux上有什么东西我必须专注于这项工作吗?

  • 我知道这不是防火墙问题,因为从我的机器工作(位于外面)和两者,外部服务器和内部服务器都无法正常工作。
  • 我知道allow_url_fopen设置为1。

ini_set('max_execution_time',30);

$address = 'xxxxxxxxxxxxxxxxxxx';
$url = 'tcp://' . $address . ':6000';
$fp = stream_socket_client($portao, $errno, $errstr, 10);    
if (!$fp) {
    echo ("$errstr ($errno)<br />\n");
    exit;    
} else {
    $out = 'open 192.168.0.22' . PHP_EOL;

    fwrite($fp, $out);

    $output = 'Nothing here.';

    while (!feof($fp)) {
        $output = stream_get_contents($fp);
    }


    fclose($fp);    
    echo $output;
    exit;
}

1 个答案:

答案 0 :(得分:0)

我在$out = 'open 192.168.0.22' . PHP_EOL;行更具体地PHP_EOL发现了问题。由于服务器目标正在运行Windows,因此它需要\r\n作为字符返回。我的计算机(localhost)运行的是Windows PHP_EOL = \r\n,但是一旦我在Linux服务器上部署了应用程序,PHP_EOL就会设置为\n。我的问题通过以下方式解决了:

$out = 'open 192.168.0.22' . "\r\n";

注意:字符\r\n必须用双引号标记("")包装才能生效。