2011-07-27 7 views
3

私は、サーバーからデータを読み取るソケットクライアントを持っています。なぜソケット読み取りはループを去らないのですか?

しかし、それ以上読み込むデータがなくなるとすぐにdo..whileループは終了しませんか?どうしてこんなことに?おかげ

while (true) 
{ 
    $data_old=$data; 
    $data = file_get_contents("userInput.txt"); 

     if($data_old != $data) 
     { 
      socket_write($socket, $data, strlen($data)); 
      do 
      { 
       $line [email protected]_read($socket,2048); 
       echo $line. "\n"; 
      } 
      while($line != ""); 
     } 

} 
+0

読んでいるときにデータがあると思いますので、いくつかの種類の終了フラグなどを使用して、読み取りが空のメッセージを停止または送信することを知るようにします。 –

+0

空の行が得られない –

+1

明らかに、読み取るデータがなくなったときにsocket_read()は( "")を返します。 – Dayzza

答えて

0

私は別の方法で解決しました。すべてのデータが送信された後、私のサーバーが( "")文をクライアントに送信する。

クライアント側は、ステートメントを受信するとループを終了します。

while (true) 
{ 
    $data_old=$data; 
    $data = file_get_contents("userInput.txt"); 

     if($data_old != $data) 
     { 
      socket_write($socket, $data, strlen($data)); 
      do 
      { 
       $line [email protected]_read($socket,2048); 
       if($line != " ") 
       echo $line. "\n"; 
      } 
      while($line != " "); 
     } 

} 
1

私はあなたの問題は実行がwhile (true)ループではなくwhile($line != "") 1を残したことがないことを、このてみていると信じて:

while (true) 
{ 
    $data_old = $data; 
    $data = file_get_contents('userInput.txt'); 

    if ($data_old != $data) 
    { 
     socket_write($socket, $data, strlen($data)); 

     while (true) 
     { 
      $line = @socket_read($socket, 2048); 

      echo $line. "\n"; 

      if ($line == '') 
      { 
       break 2; 
      } 
     } 
    } 
} 

は、ソケットはあなたがまた、使用することをお勧めします非ブロックさですsocket_select()にタイムアウトがあります。

+0

いいえ動作しません。まだ($ line == '')ブロックに入っていません。 – Dayzza

+0

@Jonathan: 'socket_read()'呼び出しから '@'を削除するとどうなりますか? –

+0

私はそれを削除しようとしましたが、それは同じままです... – Dayzza

関連する問題