Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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 如何检索客户端';服务器套接字端的IP和端口?_Java_Sockets - Fatal编程技术网

Java 如何检索客户端';服务器套接字端的IP和端口?

Java 如何检索客户端';服务器套接字端的IP和端口?,java,sockets,Java,Sockets,我有一个基于java的套接字监听器运行在桌面端,我有一个移动客户端,它能够与这个套接字服务器连接而没有任何问题。我希望在客户端尝试访问新连接时,分别为每个客户端建立套接字连接。我从这个链接读到, 关于套接字如何区分多个连接。需要指出的是,基于套接字服务器上检测到的客户端连接的IP和端口,每个连接的连接都是唯一的。每个连接的客户端端口将不同。我读到了,我们可以调用getpeername来获取套接字服务器端的客户端连接的IP和端口。但是,我在Java中看不到任何这样的API,然后找到了下面的API

我有一个基于java的套接字监听器运行在桌面端,我有一个移动客户端,它能够与这个套接字服务器连接而没有任何问题。我希望在客户端尝试访问新连接时,分别为每个客户端建立套接字连接。我从这个链接读到,

关于套接字如何区分多个连接。需要指出的是,基于套接字服务器上检测到的客户端连接的IP和端口,每个连接的连接都是唯一的。每个连接的客户端端口将不同。我读到了,我们可以调用
getpeername
来获取套接字服务器端的客户端连接的IP和端口。但是,我在Java中看不到任何这样的API,然后找到了下面的API

ServerSocket server = new ServerSocket(8080);
System.out.println("server.getInetAddress();: " + server.getInetAddress());
但是,它总是返回
server.getInetAddress():-0.0.0/0.0.0.0
当移动客户端(模拟器)调用此套接字时


有人能告诉我,为什么我没有在套接字端使用上面的InetAddress API获取客户端的IP和端口?还是我需要使用不同的方法

当服务器
接受连接时,您会得到一个表示该连接的
套接字
Socket
有一个返回远程设备地址的方法,以及一个返回远程设备端口的相应方法

例如:

Socket newSock = s.accept();
InetAddress addr = s.getInetAddress();
int         port = s.getPort();

但是,需要注意的是,您获得的IP地址可能不是实际客户机的IP地址。考虑NAT情况和HTTP代理的情况。当然,它是您连接到的外部可见地址,它可以是NAT网关或代理。这些邮件后面的地址无论如何都无法路由。嗨,吉姆,非常感谢!我尝试了“int-port=server.getLocalPort()”而不是“s.getPort();”。我试着在同一台机器上运行移动客户端模拟器和套接字,结果是“addr:0.0.0.0/0.0.0.0端口:8080”,我想,我必须用真实的物理移动设备进行测试,这样我才能正确获得实际客户端的IP和端口,我想,它工作正常。当我尝试从不同的移动设备客户端访问此套接字时,它提供了不同客户端的IP地址。但是,我总是得到同一个客户端的8080端口,即使我尝试从不同的移动客户端,如iOS、Android等。你知道原因是什么吗?手机是否连接在同一无线网络中?