나는 소켓 연결 사이에 자바 서버와 대화하는 안드로이드 애플 리케이션을 가지고있다. 서버가 실행 중일 때는 문제가 없습니다. 나는 안드로이드와 서버 대답에서 무언가를 보냅니다. 나는 응답을 받고 토스트에 넣는다. 멋지다! 하지만 서버를 실행하지 않으면 Android는 응답을 기다리고 모든 애플리케이션이 작동을 멈 춥니 다. 이상한 사실은 스레드 내에서 실행중인 응용 프로그램, 그래서 그 일이 일어나지 않아 생각합니다. 나는 그것이 응용 프로그램과 응용 프로그램의 사용자에게 서버가 응답하지 않는다고 말할 수있는 어떤 방법으로 응용 프로그램을 중단시키는 것을 피할 수있는 방법이 있는지 알고 싶습니다. 어리석은 실수가 있다면 미안 해요, 자바에서 방금 새로운 것 같아요. 코드 :왜 InputStream이 응용 프로그램을 멈추고 있습니까?
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();
}
}
}
오류 또는 예외가 발생합니까? –
이것은 또한 당신에게 흥미로울 수 있습니다 : http://stackoverflow.com/questions/9525972/add-a-timeout-when-creating-a-new-socket – Ben
오류가 없으며 예외는 없습니다. 로그에는 아무것도 표시되지 않습니다. 그냥 응용 프로그램이 멈추었다 고 말하는 대화 상자를 보여주고 내가 응용 프로그램을 닫거나 기다릴 것인지 묻는 메시지가 표시됩니다. –