Android Socket in.ReadLine()

时间:2012-11-25 10:29:16

标签: android sockets bufferedreader

我的客户端第一次发送到客户端并从服务器成功读取确认。当我再次点击发送按钮时,它写入服务器但无法再次读取。

继承我的代码:

注意: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);
                }

            } 

2 个答案:

答案 0 :(得分:1)

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

查看您的代码行,您的条件是否错误

if(text=="quit")

它应该是,

if(text.equals("quit"))

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

同时从onClickListener()循环移出按钮 while()

每次为每次迭代创建一个新的Listener对象,导致问题。

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

onCreate()的活动中。

答案 1 :(得分:1)

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