Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有一种方式让服务器知道连接的客户端';主机名是什么?_Java_Sockets - Fatal编程技术网

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可以直接与客户机通信