При использовании дейтаграммы, адрес источника и порт задаются сокетом при отправке дейтаграммы.
InetAddress sourceAddr = InetAddress.getLocalHost();
DatagramSocket sock = new DatagramSocket(sourcePort, sourceAddr);
DatagramPacket msg = new DatagramPacket(mbuf, mbuf.length, dstIP, dstPort);
sock.send(msg); // sent from sourcePort to dstPort
sourceAddr
немного избыточен в этом примере, new DatagramSocket(sourcePort)
будет привязываться к предпочтительному адресу с лучшим выбором, но если вам нужно указать IP-адрес источника помимо порта, вот как.
Для сокетов обоих типов при использовании bind(new InetSocketAddress(port))
будет выбран соответствующий адрес локального источника и указанный порт, а порт 0 также выберет соответствующий локальный порт.
Все извлекаются с getLocalAddress()
и getLocalPort()
.