#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. Вы закрыли брандмауэр? И вы все еще рассчитываете получать данные через него?