首页 > 解决方案 > UDP - 如何获取传入数据报的目标地址

问题描述

DatagramSocket socket = new DatagramSocket(3000);
byte[] buffer = new byte[65536];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
//packet.getDestAddress()

我想获取数据报到达的 IP 地址。我没有任何想法。

标签: javaandroidudp

解决方案


我认为解决这个问题的方法是改变

DatagramSocket socket = new DatagramSocket(3000);

InetAddress localAddr = ...
DatagramSocket socket = new DatagramSocket(3000, localAddr);

这样,您的套接字将绑定到特定的 IP 地址(而不是所有本地地址),并且它只会获取寻址到该 IP 地址的数据包。如果您想将数据包地址接收到多个地址并区分不同的 IP 地址,您可以DatagramSocket为每个 IP 地址创建一个不同的地址。

(处理多个套接字的复杂性可能会让您重新考虑是否真的需要知道传入数据报的目标 IP。)


推荐阅读