有没有办法让服务器知道连接客户端的主机名?

时间:2011-07-31 00:06:21

标签: java sockets

为客户端提供服务器的主机名,以便客户端可以使用给定的主机名连接到服务器。

//client side
host = new InetSocketAddress ( args[0], 50000); // args[0] = server's address
sockfd = new Socket(host.getHostName(),host.getPort());



//server side
sockfd = new ServerSocket(50000);
Socket clientfd= sockfd.accept ();

当客户端连接到上面的server A时,server A是否有办法知道客户端的主机名? 因为server A必须告诉其他server B给该客户端一些消息。

如果没有,请联系server A如何通知server B关于连接客户端?

客户还有ServerSocket,可以从server B

接收连接

2 个答案:

答案 0 :(得分:1)

服务器A可以使用getInetAddress和getHostName来确定客户端的主机名。但是,不应该需要主机名,因为您也可以从Socket获取客户端IP:

Socket clientfd = sockfd.accept();
InetAddress clientIA = clientfd.getInetAddress();
String clientHN = clientIA.getHostName();
byte[] clientIP = clientIA.getAddress();

Greg提到的网络问题仍然有效;将服务器连接回任何给定客户端可能很困难或不可能。

答案 1 :(得分:0)

一种方法是让客户端将其主机名发送到服务器A,然后服务器A将其传递给服务器B,以便服务器B可以发送客户端消息。您可能希望确保客户端不会对其自己的主机名撒谎,并且DNS已设置为将名称正确映射回客户端的地址(这通常在客户端计算机的直接控制之外)。

请注意,将“服务器”连接回“客户端”通常会出现问题,尤其是NAT和防火墙等网络问题。可能更好的想法是让客户端与服务器B建立第二个连接,以便服务器B可以直接与客户端通信。