2016-10-31 5 views
0

Можно ли использовать один и тот же объект 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). Но хочу знать, могу ли я сделать это с помощью одного.

+0

Вы пробовали перепроверять розетку? Вам придется привязать его к 5000 при получении и 5001 при отправке, но это позволит вам использовать один и тот же объект. http://download.java.net/jdk7/archive/b123/docs/api/java/net/DatagramSocket.html#bind(java.net.SocketAddress) – arynaq

+0

Нет, это невозможно, и ваше требование также является подозрительным , Это расточительно для порта. В чем причина этого странного дизайна? – EJP

+0

@arynaq Ваша собственная цитата показывает, что это невозможно. – EJP

ответ

0

Невозможно. Для использования отдельных портов необходимо использовать 2 отдельных объекта.

Смежные вопросы