java DatagramSocket получает данные Multicast Socket отправляет данные - PullRequest
4 голосов
/ 10 декабря 2010

может кто-нибудь показать мне пример в java для получения данных из DatagramSocket и отправки тех же данных через Multicast Socket

Ответы [ 2 ]

15 голосов
/ 10 декабря 2010

Отправка многоадресных дейтаграмм

Для отправки дейтаграмм любого типа на 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!
}

Для получения дополнительной информации:

1 голос
/ 10 декабря 2010

Вы получили это обратно на фронт. Вы получаете многоадресную рассылку через MulticastSocket, но вам не нужно отправлять их таким образом: вы можете отправить их через DatagramSocket.

См. Учебное пособие по Java, Пользовательский сетевой маршрут .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...