java DatagramSocket接收数据Multicast Socket发送数据

任何人都可以在java中向我展示一个从DatagramSocket接收数据并通过Multicast Socket发送相同数据的示例

发送多播数据报

为了在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 side socket.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! } 

欲获得更多信息:

  • MulticastSocket多
  • DatagramSocket的

你已经回到了前面。 您通过MulticastSocket 接收多播,但您不需要以这种方式发送它们:您可以通过DatagramSocket发送它们。

请参阅Java Tutorial,Custom Networking trail 。