Мы разработали приложение Java, которое отправляет несколько дейтаграмм UDP на тот же самый IP-адрес назначения. Очевидно, что порт назначения всегда один и тот же, но мы, похоже, не можем установить, чтобы порт источника оставался неизменным на каждой датаграмме.
Если пакет данных, который мы отправляем, больше, чем MTU, пакет должным образом разделен на один и тот же исходный порт, но как только мы отправляем новый пакет данных, исходный порт изменяет, генерируя новый сеанс брандмауэра (какой сетевой администратор предупредил нас о том, очень плохо из-за количества сеансов, создаваемых приложением).Настройка порта источника на гнездо udp
Сейчас мы посылаем пакеты со следующим утверждением:
Мы пытались несколько подходов, и результат всегда один и тот же, мы не можем, кажется, чтобы быть в состоянии установить порт источника к фиксированная стоимость.
Edit- склеивание фактический код:
private boolean sendImage(byte[] imageData, InetAddress address,
int port) throws UnknownHostException, SocketException {
boolean ret = false;
DatagramSocket socket = null;
try {
socket = new DatagramSocket();
DatagramPacket dp = new DatagramPacket(imageData, imageData.length, address, PUERTO_UDP);
socket.send(dp);
ret = true;
} catch (IOException e) {
Main.lanzarExcepcion(e);
ret = false;
} finally {
if (socket != null) {
socket.close();
}
}
return ret;
}
Спасибо за ваше время!
hmmm Я предполагаю, что порт изменяется в то время, когда предыдущий сокет UDP не закрыт, поэтому ОС пытается открыть новое соединение, чтобы предыдущий порт еще не был доступен и открывает следующий доступный. Это ваша проблема? потому что я не могу думать о какой-либо другой причине, которая изменяет порт клиента. Также вы могли бы объяснить, что «*, но как только мы отправляем новый пакет данных, который изменяется исходный порт *»? как вы пытаетесь открыть новое соединение? В той же теме? В другом процессе? как вы закрываете UDP-сокет? – AntJavaDev
Также ваша инициализация для класса 'DatagramPacket', не выглядит настолько правильной ...... даже не уверен, что это вообще скомпилировано – AntJavaDev
Способ сохранить его всегда одинаково - всегда отправлять из одного и того же сокета вместо очевидно, создавая новый сокет для каждого запроса. – EJP