为客户端提供服务器的主机名,以便客户端可以使用给定的主机名连接到服务器。
//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
答案 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可以直接与客户端通信。