Проблемы с DatagramSocket.receive () - PullRequest
       20

Проблемы с DatagramSocket.receive ()

0 голосов
/ 08 февраля 2010

Я использую класс DatagramSocket в Java для получения пакетов udp от клиента, написанного на C. Вот код, который получает (сокет сервера уже настроен):

byte[] inputByte = new byte[1];
        DatagramPacket recvdPacket = new DatagramPacket(inputByte, inputByte.length);



        try {
            serverSocket.receive(recvdPacket);

А затем он печатает содержимое. Мои отладочные сообщения (не показанные в этом коде) указывают, что он успешно достигает части receive() и ожидает (это блокирующий вызов). Вот проблема:

Этот сервер получает пакеты только в секунду времени, когда клиент, отправляющий сообщения, запускается, но не первый. Даже если клиент отправляет несколько пакетов при первом запуске, сервер никогда ничего не показывает, пока во второй раз не будет запущен весь клиент. Можно ли предположить, что проблема на стороне сервера, а не на стороне клиента? (код на стороне клиента не был написан мной ... это отвратительно, и в C).

1 Ответ

2 голосов
/ 08 февраля 2010

Я постараюсь дать лучший ответ, какой только смогу, но, имея только 3 строки кода, вы можете делать что-то плохое, чего я не вижу. Можете ли вы опубликовать еще немного соответствующего кода?

Похоже, проблема может быть в клиенте. Также есть вероятность, что ваша сеть делает что-то необычное с UDP-трафиком (я сталкивался с некоторыми из них). Если вы хотите определить, на какой стороне возникла проблема, я бы порекомендовал запустить wireshark на сервере с обоими запусками клиента, а затем посмотреть, какие пакеты получает сервер. Убедитесь, что вы даете несколько секунд между последовательными запусками клиента, а затем фильтруете для рассматриваемого порта UDP. Если при первом запуске клиента нет пакетов, достигающих сервера, возможно, ваша проблема где-то в клиенте.

...