Java Android套接字连接错误导致冻结
我正在尝试创建一个连接到服务器的套接字。用户可以手动输入套接字的IP地址和IP端口 当地址和端口有效时,不会出现任何问题,但如果地址和端口无效,则会导致我的整个应用程序冻结 代码如下:Java Android套接字连接错误导致冻结,java,android,sockets,Java,Android,Sockets,我正在尝试创建一个连接到服务器的套接字。用户可以手动输入套接字的IP地址和IP端口 当地址和端口有效时,不会出现任何问题,但如果地址和端口无效,则会导致我的整个应用程序冻结 代码如下: public void connect() { try { String txHostIP = settings.getString("txHostIP", ""); int txHostport = Integer.parseInt(settings.getString(
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,然后永远挂起。将连接超时设置为5秒-根据系统时钟运行计数器,当时间到了,如果没有连接,则抛出异常并取消连接。如果要让套接字在一定时间后中止,则必须执行以下操作:
int timeout = 5000;
int port = 1234;
String address = "localhost";
InetSocketAddress inetAddress = new InetSocketAddress(address, port);
Socket socket = new Socket();
socket.connect(inetAddress, timeout);
在设置soTimeout之前,插座将以其他方式挂起。如果无法访问远程主机,connect方法将抛出SocketTimeoutException。您是否尝试捕获
未知后异常
?尝试将IOException
更改为异常
。已经执行了该操作。仍然没有抛出异常:(可以运行getSoTimeout()吗)并告诉我们输出?@Xarus在初始化套接字之前还是之后。问题是程序在初始化套接字之后不会运行。您可能需要在异步任务中进行设置,以确保它与连接并行运行-正如您所述,使用当前代码不会调用超时指令。