改进从客户端获取服务器IP地址的方法

3
MulticastSocket multicast_socket = new MulticastSocket(Dialogos.MULTICAST_PORTA);
InetAddress group = InetAddress.getByName(Dialogos.MULTICAST_IP_GRUPO);
multicast_socket.joinGroup(group);
byte[] msg = new byte[1024];
DatagramPacket packet = new DatagramPacket(msg, msg.length);
multicast_socket.receive(packet);

在上面的代码中,服务器通过多播从客户端接收请求。现在服务器应该让客户端知道它的位置。这只是客户端猜测连接位置的一种方法,并不完全依赖于它。
但是,服务器可以安装在许多不同的环境中,因此我不知道将使用哪个接口/地址与客户端通信。因此,为了告诉客户端它在哪里,我正在编译服务器中所有可用的IP地址,并将它们全部发送回多播,以便客户端可以尝试它们,直到其中一个成功。
我的问题是:是否有改进这种机制的方法?我想知道,在服务器应用程序上,是否可以获取从客户端接收多播的本地IP,然后我就知道要发送哪个IP地址。虽然找不到能够实现这一点的方法,但也许可以通过尝试连接客户端来确定它将选择哪个本地地址进行连接?
1个回答

2

只需将单播UDP数据包发送回客户端,客户端就能够提取源IP地址。这将确保它是客户端和服务器可以互相通信的接口/路由上的地址。当然,您需要以某种方式告诉监听端口号那个数据包。


+1 但源端口在DatagramPacket中,就像源地址一样。因此,数据包可以为空,除非它需要以某种方式标识服务器。 - user207421
是的,没错,但我认为这里的意图是在某些其他端口或协议上广告服务,比如告诉客户使用TCP连接到哪里。 - Nikolai Fetissov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接