com.qiniu.android.netdiag.localdns.Resolver Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of android-netdiag Show documentation
Show all versions of android-netdiag Show documentation
Qiniu Network Diagnosis Library for Android
The newest version!
package com.qiniu.android.netdiag.localdns;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Random;
/**
* Created by bailong on 15/6/16.
*/
public final class Resolver {
private static final Random random = new Random();
final InetAddress address;
public Resolver(InetAddress address) {
this.address = address;
}
public Record[] resolve(String domain) throws IOException {
int id;
synchronized (random) {
id = random.nextInt() & 0XFF;
}
byte[] query = DnsMessage.buildQuery(domain, id);
byte[] answer = udpCommunicate(query);
if (answer == null) {
throw new DnsException(domain, "cant get answer");
}
return DnsMessage.parseResponse(answer, id, domain);
}
private byte[] udpCommunicate(byte[] question) throws IOException {
DatagramSocket socket = null;
try {
socket = new DatagramSocket();
DatagramPacket packet = new DatagramPacket(question, question.length,
address, 53);
socket.setSoTimeout(10000);
socket.send(packet);
packet = new DatagramPacket(new byte[1500], 1500);
socket.receive(packet);
return packet.getData();
} finally {
if (socket != null) {
socket.close();
}
}
}
}