之前ios必須得使用ipv6,於是服務器提供ip6訪問地址,但是android訪問,在4G情況下響應基本上在1s以上,巨慢無比,當時急着上線,也沒有顧得上去解決,服務器端直接給了一個ip4的訪問地址解決了。
經過不斷測試,發現每次解析都會收到兩個ip地址,ipv6和ipv4,ipv6總是在最前面,會被優先使用,那麼我們可以把ipv4放在第一位,讓ipv4被使用。
public class EngDNS implements Dns {
@Override
public List<InetAddress> lookup(String hostname) throws UnknownHostException {
if(TextUtils.isEmpty(hostname)){
throw new UnknownHostException("hostname == null");
}else{
try{
List<InetAddress> inetAddressList = new ArrayList<>();
InetAddress[] inetAddresses = InetAddress.getAllByName(hostname);
for (InetAddress inetAddress:inetAddresses){
if(inetAddress instanceof Inet4Address){
inetAddressList.add(0,inetAddress);
}else{
inetAddressList.add(inetAddress);
}
}
return inetAddressList;
}catch (NullPointerException ex){
UnknownHostException unknownHostException = new UnknownHostException("Broken system behavior");
unknownHostException.initCause(ex);
throw unknownHostException;
}
}
}
}