我正在尝试解析BeagleBone黑设备的IP地址,该设备位于运行我的应用程序的安卓设备的同一个网络上。我的设备的主机名是"tovremgw.local"
。如果我尝试从windows pc命令行进行ping操作,它将成功地返回IPv6地址。
使用以下代码时:
new Thread(new Runnable(){
public void run(){
Inet6Address addr = null;
try {
addr = (Inet6Address) Inet6Address.getByName("tovremgw.local");
} catch (UnknownHostException e) {
e.printStackTrace();
}
System.out.println(addr);
}
}).start();
它将返回异常:
"java.net.UnknownHostException:无法解析主机"tovremgw.local":没有与主机名关联的地址“
我在一个模拟器中运行这个应用程序,就在我使用BeagleBone的同一台pc上。
发布于 2019-01-31 03:24:42
我不知道这是否是最好的答案,但我没有设法让它使用其他方法。我不知道这是否对有同样问题的人有帮助,但我会发布我的代码来说明我是如何做到的。
public String initUdpClient() throws IOException, InterruptedException {
String tovremgwip = "";
DatagramSocket s = new DatagramSocket();
byte[] buffer = new byte[2048];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
int server_port = 5353;
InetAddress inetaddress = InetAddress.getByName("224.0.0.251");
char[] bytearray = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x74, 0x6f, 0x76,
0x72, 0x65, 0x6d, 0x67, 0x77, 0x05, 0x6c, 0x6f,
0x63, 0x61, 0x6c, 0x00, 0x00, 0x01, 0x00, 0x01
};
String messageStr = new String(bytearray);
int msg_length = messageStr.length();
byte[] message = messageStr.getBytes();
DatagramPacket p = new DatagramPacket(message, msg_length, inetaddress, server_port);
for(int i = 0; i < 3; i++){
s.send(p);
s.receive(packet);
int length = packet.getLength();
if(length > 0){
int[] temparr = new int[length];
for(int y = length - 4; y < length; y++){
tovremgwip = tovremgwip + Integer.toString(packet.getData()[y] & 0xFF);
if(y != length - 1) tovremgwip = tovremgwip + ".";
}
return tovremgwip;
}
packet.setLength(buffer.length);
TimeUnit.SECONDS.sleep(1);
}
return "";
}
当我用wireshark敲击Beaglebone时,我成功地复制了我的PC发送的数据包。然后获取接收到的消息的最后四个字节。
发布于 2019-01-28 05:38:49
https://stackoverflow.com/questions/54402715
复制相似问题