gpt4 book ai didi

java - Android:当网络连接发生变化时,DNS Java SRV 查找失败

转载 作者:行者123 更新时间:2023-12-01 08:50:10 24 4
gpt4 key购买 nike

大家周五快乐!

我的 Android 应用程序依赖 DNS Java ( http://www.dnsjava.org/doc/ ) 来执行 SRV 查找。我们刚刚发现,如果网络连接发生变化(从 LTE 切换到 WiFi 或反之亦然),从那时起,无论是否在新网络上再次建立互联网连接,每次查找都将永远超时。有时,可以通过切换回旧网络来解决此问题,但如果更改次数过多,它将无法恢复。这是我们下面使用的代码。

如果我可以提供任何其他详细信息,请告诉我。非常感谢您的帮助!

private static class ConfigUpdater extends AsyncTask<Void, Void, JsonConfig> {
private static final String SRV_RUE_CONFIG_PREFIX = "_rueconfig._tls.";
ConfigListener listener;
String request_url;
String query_url;
String username, password;
String errorMsg;

public ConfigUpdater(String url, String username, String password, ConfigListener listener) {
this.username = username;
this.password = password;
this.listener = listener;
query_url = SRV_RUE_CONFIG_PREFIX + url;
errorMsg = "Failed to Login";
org.xbill.DNS.ResolverConfig.refresh();
}

@Override
protected JsonConfig doInBackground(Void... params) {
Record[] records;// = new Record[0];
try {
Lookup configLookup = new Lookup(query_url, Type.SRV);
configLookup.setCache(null);
records = configLookup.run();
} catch (TextParseException e) {
e.printStackTrace();
return null;
}
if(records != null && records.length > 0) {
for (Record record : records) {
SRVRecord srv = (SRVRecord) record;
String hostname = srv.getTarget().toString().replaceFirst("\\.$", "");
request_url = "https://" + hostname + "/config/v1/config.json";
Log.d("Auto Config request_url: "+request_url);
}

try {
String reponse_str = getFromHttpURLConnection();
Log.d("Auto Config JSON: "+reponse_str);
return parseJson(username, reponse_str, request_url);
} catch (Throwable e){
Log.d("Issue parsing json");
e.printStackTrace();
}
}
return null;
}

最佳答案

对于那些可能在网络切换后因 SRV 查找失败而苦苦挣扎的人,我似乎已经发现了问题。问题是 Lookup 对象上的 Resolver 属性似乎缓存了网络配置。如果您想确保查找始终具有最新的网络配置,只需重新初始化新的解析器即可。通过以下修改,我无法重现任何初始测试用例。

Record[] records = null;// = new Record[0];
try {
Lookup configLookup = new Lookup(query_url, Type.SRV);
configLookup.setResolver(new ExtendedResolver()); /** FIX **/
records = configLookup.run();
} catch (TextParseException e) {
e.printStackTrace();
return null;
} catch (UnknownHostException e) {
e.printStackTrace();
}

关于java - Android:当网络连接发生变化时,DNS Java SRV 查找失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42444575/

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