Можно ли использовать один и тот же объект DatagramSocket для чтения и записи с использованием двух разных портов? Мне нужно получить на порт X и записать на порт X + 1. В настоящее время, что я делаю:UDP Чтение/запись с использованием разных портов
sock = new DatagramSocket(5000);
byte[] buffer = new byte[DataAdapterFB1.HEADER_SIZE + DataAdapterFB1.MAX_DATA_BYTES];
DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
sock.receive(incoming);
И позже:
dp = new DatagramPacket(send.getBytes(), send.getBytes().length, DataAdapterFB1.ccuAddr, 5001);
sock.send(dp);
Я не вижу выхода из пакетов, переданных на Wireshark.
Я также попытался:
sock = new DatagramSocket();
byte[] buffer = new byte[DataAdapterFB1.HEADER_SIZE + DataAdapterFB1.MAX_DATA_BYTES];
DatagramPacket incoming = new DatagramPacket(buffer, buffer.length,DataAdapterFB1.localhost, 5000);
sock.receive(incoming);
dp = new DatagramPacket(send.getBytes(), send.getBytes().length, DataAdapterFB1.Addr, 5001);
sock.send(dp);
Но это не похоже на работу. Я смог заставить его работать, используя 2 объекта datagramsocket. (Прочитано один связывает порт в декларации, Write one does not). Но хочу знать, могу ли я сделать это с помощью одного.
Вы пробовали перепроверять розетку? Вам придется привязать его к 5000 при получении и 5001 при отправке, но это позволит вам использовать один и тот же объект. http://download.java.net/jdk7/archive/b123/docs/api/java/net/DatagramSocket.html#bind(java.net.SocketAddress) – arynaq
Нет, это невозможно, и ваше требование также является подозрительным , Это расточительно для порта. В чем причина этого странного дизайна? – EJP
@arynaq Ваша собственная цитата показывает, что это невозможно. – EJP