Как получить данные из UDP с помощью Java?

#java #sockets #networking #network-programming #udp

#java #сокеты #сеть #сетевое программирование #udp

Вопрос:

Я новичок в сетевой инженерии, и у меня было задание следующего содержания. Внешнее устройство отправляет UDP-пакет на мой компьютер каждые 1 секунду. Я хочу использовать информацию в этом UDP-пакете. В качестве интерфейса сокета я использую язык программирования Java. Я пытаюсь написать код для выполнения этого назначения. Однако я не вижу никаких данных, хотя я могу видеть UDP-пакеты через Wireshark.Номер порта назначения в UDP-пакете 876, как я вижу из Wireshark. Ниже приведен код, который я написал. Я также закрываю брандмауэры своего компьютера. Кто-нибудь может мне помочь, почему это происходит?

 import java.io.*;

import java.net.*;

public class UDPReceive {

    public static void main(String[] args) throws Exception {
        DatagramSocket serverSocket = new DatagramSocket(876);
        byte[] receiveData = new byte[102];
        System.out.println("1");

        while(true){
            System.out.println("2");
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            System.out.println("3");
            serverSocket.receive(receivePacket);
            System.out.println("4");
            String sentence = new String(receivePacket.getData());
            System.out.println("5");
            System.out.println(sentence);
        }
    }
}
  

Код не выводит «4», а выводит 1,2,3.

Комментарии:

1. Что вы подразумеваете под «кабелем Ethernet»? Ethernet работает на различных носителях (коаксиальный, UTP, STP, волоконная оптика — как MM, так и SM). Такого понятия, как кабель Ethernet, не существует, потому что все эти носители можно использовать и для других протоколов.

2. Устройство, с которым я взаимодействую с моим компьютером, имеет кабель, который подключается к моему компьютеру через порт Ethernet, подобный Интернет-порту. Я получаю информацию оттуда и могу видеть пакеты в Wireshark. Поэтому я не думаю, что тип важен. Мне интересно, хотя я могу видеть пакеты, почему я не могу получить их с помощью данного кода.

3. В коде нет ничего специфичного для кабеля или даже для ethernet. Дейтаграмма UDP отправляется на IP (либо IPv4, либо IPv6), который инкапсулирует дейтаграмму в IP-пакет, который затем отправляется по протоколу передачи данных (ethernet, в вашем случае), который инкапсулирует пакет в фрейм, затем фрейм отправляется на физический интерфейс, где он кодируется в биты по проводам. UDP не знает или не заботится о протоколе передачи данных или физическом интерфейсе.

4. Окей, извините за недопустимую информацию, но мой вопрос совершенно другой, я вижу код, который я даю на многих разных веб-сайтах, основной целью которых является получение UDP-пакета. Однако я не могу сделать это на своем компьютере. Вот почему я задал вопрос.

5. Вы закрыли брандмауэр? И вы все еще рассчитываете получать данные через него?