0

チャット アプリケーションのサーバーで次のコードを使用しています。ここでは、クライアントごとに別のスレッドを使用しています。 コード:

public void run()
{
String msg;
InputStreamReader isReader = new InputStreamReader(sock.getInputStream())
BufferReader r= new BufferedReader(isReader);
int i=0,j=0;
System.out.print("entered run again"+i++);
try{
             while((msg=r.readLine())!=null)
    {
        System.out.println("readed"+msg );

            spreadMsg(msg);

    }


    }catch(Exception e){e.printStackTrace();}


 }


}   

while ループ "while((msg=r.readLine())!=null)"が無限ループとして動作する理由と、入力した唯一の行を読み取った後に返されない理由。

4

2 に答える 2

0

によって返されるストリームはSocket.getInputStream()、クライアントによってソケットが閉じられるまでnullを返しません。

于 2012-12-19T14:31:49.070 に答える
0

while ループ "while((msg=r.readLine())!=null)" が無限ループとして動作する理由と、入力した唯一の行を読み取った後に返されない理由。

もう一方の端は接続を閉じていないので、リーダーはあなたが 1 行だけ送信することを知りません。

1 行だけが送信されると仮定したい場合は、ループする代わりに自分で接続を閉じることができます。

于 2012-12-19T14:42:31.290 に答える