关于Java Socket开发中获取客户端真实ip地址的问题

[复制链接]
查看: 282|回复: 0

21

主题

21

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2019-2-17 10:21:16 | 显示全部楼层 |阅读模式

          最近在学习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,没办法才用了花生壳,希望大佬门帮帮忙

         
              
               
            
            

              
         
      
      
      
腾讯云
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩图文



在线客服(工作时间:9:00-22:00)
400-600-6565

内容导航

微信客服

Copyright   ©2015-2019  云服务器社区  Powered by©Discuz!  技术支持:尊托网络     ( 湘ICP备15009499号-1 )