|
最近在学习java socket编程,然后现在涉及到了非局域网内的通信,说白点就是需要打洞让两个在不同NAT后的客户端可以通信,目前我是买了一个腾讯云服务器,在上面搭建了一个tcp的 ServerSocket,,然后用花生壳让服务器上的内网ip能直接被外网访问,目前遇到一个问题就是,我获取到了客户端的连接后,调用对应的方法拿到的不是客户端的IP,都是服务器的IP,代码很简单,如下:
class MyServer extends Thread{
ServerSocket mServer;
public MyServer(){
}
@Override
public void run() {
try {
mServer = new ServerSocket(8989);
while(true){
Socket client = mServer.accept();
System.out.println(client.getLocalSocketAddress().toString());
System.out.println(client.getInetAddress().toString());
System.out.println(client.getLocalAddress().toString());
System.out.println(client.getRemoteSocketAddress().toString());
System.out.println(client.getLocalSocketAddress().toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
上面是服务器端的代码,很简单,在main方法中直接start这个线程,等待客户端连接,然后打印,
但是里面方法打印出来的,都是我服务器的IP,很纠结,在网上看了下,都说client.getInetAddress().toString()这个方法可以正确获取客户端IP,结果并不是,很纠结啊,麻烦有知道的大佬帮我解答解答,是因为我用了花生壳的原因还是其他啥原因呀,腾讯云这个服务器,外网ip不能直接用在我的socket上,只能用内网ip,没办法才用了花生壳,希望大佬门帮帮忙
|
|