0

リッスン サーバーにデータを送信し、PHP のソケットを使用して応答を取得する必要があります。

正常に動作します (受信者は必要なものを取得します) が、サーバーの応答を取得しようとすると、うまくいきません。それはただ何度も何度も何度も繰り返されます... 終わりがないように見えwhileますが、なぜですか? (サーバー側のチームでチェックし、応答が私に提出されていると言います)。

私はPhpを使用していますが、サーバーはc ++です(これが問題かもしれないと聞きました)

コード:

ini_set('max_execution_time', 36000); // to test the shile for a longer time, but aparentry responce goes right away

$fp = fsockopen("192.168.x.x", 9999, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {

    echo "Connected<br />\n";

$out = chr(11)."MSH|....some fields there....|".chr(28).chr(13); //chr(x) are ruquired by serwer

if ( fputs($fp, $out, strlen($out)) )
{

    echo "<br />\nwriting message<br />\n";//if I eomment the while below this will show without problem

    while (!feof($fp)) {
       echo fgets($fp, 1024);
    }//just goes and goes... never finding end of file (I gues)
}

    fclose($fp);
}

PHPでソケットを開くために3つの異なる方法を使用しましたが、それらはすべて同様の問題を抱えているようです。何が問題なのかをテストするにはどうすればよいですか?

4

1 に答える 1

1

私は fputs の代わりに fwrite を試してみますが、あなたのコードは問題なく見えます。それを何に使用するか、どのサーバーなどを説明して、それに関する少しのドキュメントを取得する必要があります。

そして、TCP/UDP を選択します。

$fp = fsockopen('udp://192.168.X.X', '9999', $errno, $errstr, 10);
fwrite($fp, '\\xff\\xff\\xff\\xff\\'); 

そして、これを試してください。

 do {
      $contents .= fgetc($fp);
      $socketstatus = socket_get_status($fp);    
    } while($socketstatus["unread_bytes"]); 

 echo $contents;
于 2013-03-29T09:14:23.160 に答える