簡體   English   中英

java DatagramSocket 接收數據 Multicast Socket 發送數據

[英]java DatagramSocket receive data Multicast Socket send data

任何人都可以在java中向我展示一個示例來從DatagramSocket接收數據並通過多播套接字發送相同的數據

發送組播數據報

為了在 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接收MulticastSocket ,但您不需要以這種方式發送它們:您可以通過DatagramSocket發送它們。

請參閱Java 教程,自定義網絡跟蹤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM