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

因为,我认为你的 Socket 没有关闭,

看看你的代码行,你的 if 条件是错误的,

if(text=="quit")

它应该是,

if(text.equals("quit"))

要比较一个字符串,请始终使用Java String 类中的一个.equals()equlaIgnoreCase()方法。

还将按钮 onClickListener()while()循环中移出。

每次它为导致问题的每次迭代都为 Button 创建一个新的侦听器对象。

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

onCreate()活动中。

于 2012-11-25T10:33:08.127 回答
1

不要每次在循环中创建新的流。在套接字的生命周期内创建一次。您正在通过创建新数据而丢弃正在丢弃的流中的缓冲数据。

于 2012-11-25T22:21:40.690 回答