发送多播数据报
为了用Java发送任何类型的数据报,无论是单播,广播还是多播,都需要一个
java.net.DatagramSocket:
DatagramSocket socket = new DatagramSocket();
可以选择将本地端口提供给套接字必须绑定到的DatagramSocket构造函数。仅当一个人需要其他方能够在特定港口与我们联系时才需要这样做。第三个构造函数获取要绑定的本地端口和本地IP地址。(很少)与多宿主主机一起使用,在多主机上接收流量的网络适配器很重要。
DatagramSocket socket = new DatagramSocket();byte[] b = new byte[DGRAM_LENGTH];DatagramPacket dgram;dgram = new DatagramPacket(b, b.length, InetAddress.getByName(MCAST_ADDR), DEST_PORT);System.err.println("Sending " + b.length + " bytes to " + dgram.getAddress() + ':' + dgram.getPort());while(true) { System.err.print("."); socket.send(dgram); Thread.sleep(1000);}接收多播数据报
可以使用普通的DatagramSocket发送和接收单播和广播数据报,以及发送多播数据报。但是,为了接收多播数据报,需要一个MulticastSocket。原因很简单,需要做更多的工作来控制和接收UDP以下所有协议层的多播流量。
byte[] b = new byte[BUFFER_LENGTH];DatagramPacket dgram = new DatagramPacket(b, b.length);MulticastSocket socket = new MulticastSocket(DEST_PORT); // must bind receive sidesocket.joinGroup(InetAddress.getByName(MCAST_ADDR));while(true) { socket.receive(dgram); // blocks until a datagram is received System.err.println("Received " + dgram.getLength() + " bytes from " + dgram.getAddress()); dgram.setLength(b.length); // must reset length field!}想要查询更多的信息:
- 组播套接字
- 数据报套接字



