【发布时间】:2014-01-09 10:29:40
【问题描述】:
我正在尝试创建一个连接到服务器的套接字。用户可以手动输入套接字的 IP 地址和 IP 端口。
地址和端口有效时不会出错,但如果无效,则会导致我的整个应用程序冻结。
这是代码:
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吗? -
尝试将
IOException更改为Exception。 -
Piotr 已经这样做了。仍然没有抛出异常:(
-
你能运行 getSoTimeout() 并告诉我们输出吗?
-
@Xarus 在初始化套接字之前或之后。问题是初始化套接字后程序不会运行