马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近用安卓开发了一点小东西,遇到了一个问题:
出问题的是一个函数,功能为建立一个Socket并连接到服务器。
当服务器开启时,代码可以正常运行,没问题。
当服务器关闭时,代码会在第五行client=new Socket(serverip, Integer.parseInt(port));语句卡住,无法继续执行。
我理想的情况情况是:若链接不到服务器,就抛出某一个错误,然后程序就得知出现了"链接不到服务器的错误",为用户弹出一个提示框。
public Socket newClient(String host, String port) throws ConnectException,UnknownHostException, IOException {
Socket client = null;
try{
InetAddress serverip= InetAddress.getByName(host);
Log.d("at TCP", "client go");
client=new Socket(serverip, Integer.parseInt(port));
Log.d("at TCP", "client ok");
}catch(ConnectException e){
Log.e("at TCP CONNECTexception", e.getMessage());
}catch(UnknownHostException e){
Log.e("at TCP",e.getMessage());
}catch(IOException e){
Log.e("at TCP",e.getMessage());
}
return client;
}
对 Java 不熟,不清楚这方面的最佳实践是什么样的
查了一下文档,文档没说明这样在构造函数直接进行连接建立的 Socket 连接超时时间是多少
同时也注意到,此构造函数和不带 timeout 参数的 connect 方法均不会抛出 SocketTimeoutException 异常
推测可能能通过构造未连接的 Socket,调用带 timeout 参数的 connect 方法,捕获上述异常来发现超时并给出提示来解决此问题,供您参考
https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/net/Socket.html#connect(java.net.SocketAddress,int)
|