【问题标题】:Improving the way I get server's ip address from the client改进从客户端获取服务器 IP 地址的方式
【发布时间】:2012-12-01 16:11:30
【问题描述】:
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,然后我会知道要发回哪个。虽然找不到这样做的方法。也许某种方式尝试连接到客户端只是为了知道它会选择哪个本地地址?

【问题讨论】:

    标签: java sockets networking multicast


    【解决方案1】:

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

    【讨论】:

    • +1 但源端口在 DatagramPacket 中,就像源地址一样。因此数据包可以是空的,除非它需要以某种方式识别服务器。
    • 是的,没错,但我认为这里的目的是在某个 other 端口甚至协议上宣传服务,例如告诉客户端使用 TCP 连接到哪里。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多