Java 是否有一种方式让服务器知道连接的客户端';主机名是什么?
为客户端提供服务器的主机名,以便客户端可以使用给定的主机名连接到服务器Java 是否有一种方式让服务器知道连接的客户端';主机名是什么?,java,sockets,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
//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 ();
当客户端连接到上述服务器A
时,是否有方法让服务器A
知道客户端的主机名?
因为服务器A
必须告诉另一个服务器B
给该客户端一些消息
如果没有,连接的服务器A
应如何通知服务器B
连接到客户端
客户端还具有
ServerSocket
,它可以接收来自服务器B的连接服务器A可以使用getInetAddress和getHostName来确定客户端的主机名。不过,不需要主机名,因为您还可以从套接字获取客户端IP:
Socket clientfd = sockfd.accept();
InetAddress clientIA = clientfd.getInetAddress();
String clientHN = clientIA.getHostName();
byte[] clientIP = clientIA.getAddress();
然而,格雷格提到的网络问题仍然有效;让服务器连接回任何给定的客户机可能很困难或不可能。一种方法是让客户机将其主机名发送到服务器a,然后服务器a将传递给服务器B,以便服务器B可以发送客户机消息。您需要确保客户机没有谎报自己的主机名,并且DNS设置为正确地将名称映射回客户机地址(这通常不在客户机的直接控制范围内)
请注意,让“服务器”连接回“客户机”通常会有问题,特别是NAT和防火墙等网络问题。可能更好的办法是让客户机与服务器B建立第二个连接,以便服务器B可以直接与客户机通信