【发布时间】:2014-03-02 07:36:42
【问题描述】:
我有一个在套接字连接之间与 Java 服务器通信的 Android 应用程序。当服务器运行时,没有问题。我从 Android 和服务器答案发送了一些东西。我得到响应并将其放入 Toast。看起来很棒!但是如果我停止运行服务器,Android 会一直等待答案,所有应用程序都会停止工作。奇怪的是应用程序在线程内运行,所以我认为它不应该发生。我想知道是否有某种方法可以避免它导致应用程序崩溃,以及是否有某种方法可以告诉应用程序的用户服务器没有响应。如果有一些愚蠢的错误,我很抱歉,我只是 Java 新手。代码:
public void onClick(DialogInterface dialog, int whichButton) {
InetAddress ia;
try {
ia = InetAddress.getByName("192.168.3.101");
s = new Socket(ia,12346);
Thread t = new Thread(new doComms(s));
t.start();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}});
还有 doComms 类:
class doComms implements Runnable {
private Socket s;
String line,inp;
doComms(Socket server) {
this.s=server;
}
public void run () {
inp="";
try {
// Get input from the client
DataInputStream in = new DataInputStream (s.getInputStream());
PrintStream out = new PrintStream(s.getOutputStream());
out.println(input.getText().toString()+"\n.");
while((line = in.readLine()) != null && !line.equals(".")) {
inp=inp + line;
}
runOnUiThread(new Runnable() {
public void run() {
if(inp.equals("ok")){
Toast.makeText(Inicio.this,"Mensagem enviada com sucesso",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(Inicio.this,"Falha ao enviar mensagem",Toast.LENGTH_LONG).show();
}
}
});
Log.v("inp", inp);
Log.v("type",inp.getClass().toString());
s.close();
} catch (IOException ioe) {
System.out.println("IOException on socket listen: " + ioe);
ioe.printStackTrace();
}
}
}
【问题讨论】:
-
是否抛出任何错误或异常?
-
这对你来说也可能很有趣:stackoverflow.com/questions/9525972/…
-
无错误,无异常。日志什么也没显示。只是应用程序显示一个对话框说它停止并询问我是要关闭应用程序还是等待
-
我去看看 Ben,谢谢!
-
我已经尝试过 Ben,它对我没有任何效果
标签: java android sockets timeout inputstream