Простой UDP-ридер - PullRequest
       6

Простой UDP-ридер

3 голосов
/ 25 августа 2011

Я пытаюсь прочитать весь трафик с UDP-порта 6610, и я вижу пакеты в Wireshark.Я сделал для этого простую читалку:

public class ReceiveUDP extends Thread {

private int port = 6610;
private byte[] buffer = new byte[256];
private DatagramSocket socket;
private DatagramPacket packet;

public ReceiveUDP() throws SocketException {
    socket = new DatagramSocket(port);
    packet = new DatagramPacket(buffer, buffer.length);
    System.out.println("Succesfull socket / packet creation");
}

@Override
public void run() {
    try {
        socket.receive(packet);
        System.out.println("Succeded!");
    } catch (IOException e) {
        System.out.println("Failed to receive packet"+e.getCause().getMessage());
    }
}

public static void main(String[] args) throws SocketException {
    new ReceiveUDP().start();
}

Распечатка:

Succesfull socket / packet creation

Т.е. скрипт блокируется на socket.receive(packet).Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Он не совсем блокируется на receive(), он блокирует на receive().В частности, он будет ждать на приемной линии, пока что-то не появится.В целях отладки и тестирования вы можете использовать что-то вроде:

socket.setSoTimeout(5000); // Block for max 5 seconds

while (true) {
   try {
      s.receive(packet);
      System.out.println("Succeded!");
      break;
   } catch (SocketTimeoutException ste) {
      // Timeout reached, log this and try again.
      // Possibly keep track of the total number of tries and give up 
      // (break) if it exceeds a threshold.
      System.out.println("Timeout reached, will try again");
   } catch (IOException iox) {
      System.out.println("I/O Error: " + iox.getMessage());
      break;
   }
}

Как правило, неплохо использовать тайм-аут в сокетах, это предотвращает бесконечное ожидание вашего приложения.Будет ли это иметь смысл для вас, конечно, зависит от вашего варианта использования.

0 голосов
/ 25 августа 2011

Как отметил Йоахим Зауэр, IP-адрес назначения не был установлен на мой IP-адрес.Изменение этой проблемы решило мою проблему.

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