2012-04-24 72 views
2

我已经使用了知名的优秀Knock Knock server tutorial作为学习java网络的一种方式。我试图找出使用socket.getInetAddress()连接的客户端的IP地址,但它总是返回我的路由器的IP,192.168.1.254,可能是因为连接在那里弹跳。有什么方法可以获得连接到tcp套接字的远程客户端的正确ip地址?在java中获取远程tcp连接的ip地址?

回答

3

试试这个:

ServerSocket sSock; 
Socket cSock; 

sSock = new ServerSocket(port_number); 
clientSocket = sSock.accept(); 
System.out.println(cSock.getRemoteSocketAddress()+" connected\n"); 

它将打印连接客户端的全套接字地址如下:

/127.0.0.1:1878连接

+0

谢谢,这将返回与getInetAddress()的地址相同,但包含端口。它仍然出现为192.168.1.254,但我认为这是因为我试图从同一个网络内部连接到我的外部IP。基本上最后我连接到本地主机,但以一种迂回的方式。我期待它能够返回我外部IP的价值。也放松Nikhar,我是新来的。你已经接受了。 – localhost 2012-04-24 15:41:53

+0

如果服务器和客户端位于同一台计算机或同一网络上,它将不会提供外部IP。试试这个与你的朋友,然后他需要连接到你的服务器通过你的外部IP ..和哈哈..没有它只是我看到你的其他问题,甚至在那里你不接受任何答案...我也是新的,你的接受将会对我和社区有所帮助。 – Nikhar 2012-04-24 15:55:29

+0

我甚至不知道有一个接受按钮,直到你抱怨我“从未接受答案”。 :-)其实我很确定我的原始代码会给出正确的答案(减去端口号),如果它是从外部连接的朋友。 – localhost 2012-04-25 05:28:10