太ugly了,但是可以工作,抓了包下來,用前面DNS message structure做了下比較。
代碼如下:
import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; public class Receiver { private static final String TAG = null; private static final String Log = null; private String HostName; private static String HostIP; private static int count = 4; public static void main(String[] args) throws Exception { InetAddress group = InetAddress.getByName("224.0.0.251"); MulticastSocket s = new MulticastSocket(5353); byte[] arb = new byte[512]; s.joinGroup(group); while (count-- > 0) { DatagramPacket datagramPacket = new DatagramPacket(arb, arb.length); s.receive(datagramPacket); HostIP = datagramPacket.getAddress().getHostName(); System.out.println(HostIP); for (int i = 0; i < arb.length; i++) { if (arb[i] > 0) { System.out.printf("data[%4d] = 0x%02x (%c),\r\n",i,arb[i],arb[i]); } else { System.out.printf("data[%4d] = 0x%02x,\r\n",i,arb[i]); } } } } }
好吧好吧,我是第一次考慮怎么在cmd下運行java 程序。
首先,需要有jdk,需要用jdk進行編譯:javac Receiver.java
ok,此時會有個名為Receiver.class的文件生成。
然后就可以run了:java Receiver
注意,上面沒有.class哦。
另外,在這里通常會遇到的問題有:
1、找不到javac或者java,此時需要設置系統的環境變量,讓命令行能找得到相應bin文件。
2、編譯提示找不到庫之類,需要把jdk的庫給添加到classpath里面去。
3、運行時提示找不到類,除了上一條,你還需要在classpath里面添加路徑“.”,表示包含當前目錄。
