gpt4 book ai didi

java - IP错误的Android套接字连接导致卡住

转载 作者:搜寻专家 更新时间:2023-11-01 08:53:28 25 4
gpt4 key购买 nike

我正在尝试创建一个连接到服务器的套接字。用户可以手动输入套接字的 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 然后永远挂起。

最佳答案

如果你想让套接字在一定时间后中止,你必须这样做:

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。

关于java - IP错误的Android套接字连接导致卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21017641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com