我的客户端第一次发送到客户端并从服务器成功读取确认。当我再次点击发送按钮时,它写入服务器但无法再次读取。
继承我的代码:
注意: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);
}
}
答案 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)
每次循环时都不要创建新的流。在套接字的生命周期中创建它们一次。您正在通过创建新的数据丢失要丢弃的流中的缓冲数据。