0

私のクライアントはクライアントに送信し、初めてサーバーから正常に確認応答を読み取ります。送信ボタンをもう一度押すと、サーバーに書き込みますが、再度読み取ることができません。

私のコードは次のとおりです。

注: doit 変数は、ボタンが押されたことを示し、ユーザーがもう一度ボタンを押すまで 0 に戻ります。

 while (connected) {
                try {
                    Log.d("ClientActivity", "C: Sending command.");

                   b.setOnClickListener(new View.OnClickListener() {

                       public void onClick(View v) {
                           // TODO Auto-generated method stub

                         doit=1;
                         Log.e("ErrorButton","NextTime "+doit);
                       }
                   });  
                  if(doit==1)
                  {
                      Log.e("ErrorButton","If");
                  ////
                      out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true); 
                    in = new BufferedReader(new InputStreamReader(socket.getInputStream()));                

                    out.println("Helloo");

                    while ((text = in.readLine()) != null) {
                        finall += text;
                        Log.e("Test","Final: "+finall);
                      if(text=="quit")
                      {
                          socket.close();
                      }
                  Log.e("ClientActivity", "After Read "+doit+" "+finall);
                 // in.close();

                   doit=0;
                   Log.e("ClientActivity", "After If "+doit);
                  } 

                  }     



                } catch (Exception e) {
                    Log.e("ClientActivity", "S: Error", e);
                }

            } 
4

2 に答える 2

1

ループの周りで毎回新しいストリームを作成しないでください。ソケットの存続期間中、一度作成してください。新しいストリームを作成することにより、破棄するストリーム内のバッファリングされたデータが失われます。

于 2012-11-25T22:21:40.690 に答える
1

Socket が閉じていないと思うので、

コード行を見てください。 if 条件が間違っています

if(text=="quit")

そのはず、

if(text.equals("quit"))

String を比較するには、常にJava String クラスの.equals()またはメソッドを使用します。equlaIgnoreCase()

また、ボタン をループonClickListener()から外します。while()

問題の原因となる反復ごとにボタンの新しいリスナーオブジェクトを作成するたびに。

書く

b.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
    doit=1;
    Log.e("ErrorButton","NextTime "+doit);
  }
}); 

活動中onCreate()

于 2012-11-25T10:33:08.127 に答える