这是使用PHP连接到TCP端口的正确方法吗?

时间:2011-08-08 12:32:45

标签: php tcp fsockopen

服务正在侦听1xx.xxx.xx.xx上的端口1234 我正在使用php fsockopen()与服务建立tcp连接!我要将传入的数据发送到服务,并将我从服务中获得的回复保存在文件中。 第一次发送数据时,建立连接。第二次代码再次尝试打开端口,这次服务说,SP尝试连接。拒绝连接。存在活动的SP连接。 SP关闭。

我如何克服这个问题?

#!/usr/local/php5/bin/php-cgi
<?php 
//The Client
error_reporting(E_ALL);
$CONTENT = $_GET["DATA"]."";
echo urldecode($CONTENT);
$Handle = fopen("/xxx/xxx/xxx.txt", "a");
fwrite($Handle, $CONTENT);
fclose($Handle);

//$address = "1xx.xxx.xx.xx";
//$port = 1234;

/* Create a TCP/IP socket. */
$fp = fsockopen("tcp://1xx.xxx.xx.xx",1234 , $errno, $errdesc); 
if ( ! $fp ) {
  die ( "Couldn't connect to 1xx.xxx.xx.xx :\nError: $errno\nDesc: $errdesc\n" );
}
fputs ( $fp, $CONTENT );
while ( ! feof( $fp ) ) {
  $output = fgets( $fp, 2048 );
}
fclose( $fp );
$Handle1 = fopen("/xxx/xxx/yyy.txt", "a");
fwrite($Handle1, $output);
fclose($Handle1);

?>

1 个答案:

答案 0 :(得分:0)

还有一点说明: 你需要替换

while ( ! feof( $fp ) ) {
  $output = fgets( $fp, 2048 );
}

$output=''
while ( ! feof( $fp ) ) {
  $output .= fgets( $fp, 2048 );
}

因为$output = fgets( $fp, 2048 );会在每个迭代循环中覆盖$ output内容。

关于您的问题 - 我认为服务中存在一些错误。