我想创建一个连接到服务器的套接字。用户可以手动输入插座的IP地址和IP端口。与错误的IP导致Android套接字连接导致冻结
当地址和端口有效时没有任何错误,但是当它们不这样做时,它会导致我的整个应用程序冻结。
这是代码:
public void connect() {
try {
String txHostIP = settings.getString("txHostIP", "");
int txHostport = Integer.parseInt(settings.getString("txHostPort", ""));
//Where it all goes wrong. The program just hangs here for eternity
socket = new Socket(txHostIP, txHostport);
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
} catch (IOException e) {
showMessage(context, "Something went wrong");
}
}
我要的是一个消息弹出时,可以进行无连接,但程序不会引发异常,如果一个IP地址或端口不正确。
我该如何解决这个问题?任何帮助是极大的赞赏!
编辑:
我已经添加了一些System.out的打印显示一个程序如何挂起。我还添加了5秒的套接字连接超时。该程序甚至不会达到该代码块。
public void connect() {
try {
String txHostIP = settings.getString("txHostIP", "");
int txHostport = Integer.parseInt(settings.getString("txHostPort", ""));
System.out.println("1");
socket = new Socket(txHostIP, txHostport);
System.out.println("2");
socket.connect(socket.getLocalSocketAddress(), 5000);
System.out.println("3");
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
System.out.println("4");
} catch (IOException e) {
showMessage(context, "Something went wrong");
}
}
它只是打印1,然后永远挂起。
你有没有尝试捕捉'UnknownHostException'? – OrhanC1
尝试将'IOException'更改为'Exception'。 –
已经做了Piotr。仍然没有抛出异常:( –