Android IP地址与java

Android IP地址与java,java,android,networking,Java,Android,Networking,我正在写一个支持多人游戏的Android视频游戏。有一个专用服务器正在运行,当打开一个套接字点击多人游戏按钮时,androids将连接到该服务器(这很好)。服务器基本上只是一个配对系统 当客户端托管游戏时,服务器会将该客户端添加到主机列表中。其他客户端可以选择查看此列表,然后连接到该主机。这就是问题所在。服务器应该跟踪主机的ip/端口,然后其他客户端应该使用此信息打开主机的套接字,然后游戏开始。我试图让主机将自己的IP地址发送到服务器,以便其他客户端稍后使用 到目前为止,我已经尝试了很多方法。一

我正在写一个支持多人游戏的Android视频游戏。有一个专用服务器正在运行,当打开一个套接字点击多人游戏按钮时,androids将连接到该服务器(这很好)。服务器基本上只是一个配对系统

当客户端托管游戏时,服务器会将该客户端添加到主机列表中。其他客户端可以选择查看此列表,然后连接到该主机。这就是问题所在。服务器应该跟踪主机的ip/端口,然后其他客户端应该使用此信息打开主机的套接字,然后游戏开始。我试图让主机将自己的IP地址发送到服务器,以便其他客户端稍后使用

到目前为止,我已经尝试了很多方法。一是:

try {
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) {
                    return inetAddress.getHostAddress().toString();
                }
            }
        }
    } catch (SocketException ex) {
    }
当我将其作为java应用程序运行时,它返回我正在寻找的ip地址,但当我将其作为android应用程序运行时,它不起作用。最后一个if条件不满足,myIP最终为null。注意,我已经包括了权限:android.permission.INTERNET、android.permission.ACCESS\u WIFI\u STATE、android.permission.ACCESS\u rough\u LOCATION、android.permission.ACCESS\u NETWORK\u STATE


有人能帮我吗?

您是否必须依靠主机计算出自己的IP地址并将其提供给服务器?如果主机打开一个连接并向服务器发送一条消息,宣布它正在托管一个游戏,那么服务器是否可以使用连接和消息来自的IP地址?这样可以完全避免问题。

试试这个

WifiManager wim= (WifiManager) getSystemService(WIFI_SERVICE)  ;
    List<WifiConfiguration> l=  wim.getConfiguredNetworks(); 
    WifiConfiguration wc=l.get(0); 
textview.append(  "\n"+ Formatter.formatIpAddress(wim.getConnectionInfo().getIpAddress()));
WifiManager wim=(WifiManager)getSystemService(WIFI_服务);
列表l=wim.getConfiguredNetworks();
WifiConfiguration wc=l.get(0);
textview.append(“\n”+格式化程序.formatIpAddress(wim.getConnectionInfo().getIpAddress());

如果您只需要Wifi连接的IP,您可以将IP检索为32位整数:

WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ip = wifiInfo.getIpAddress();
然后,以点十进制表示法构造IP;位移位并屏蔽结果:

String ipString = String.format(
"%d.%d.%d.%d",
(ip & 0xff),
(ip >> 8 & 0xff),
(ip >> 16 & 0xff),
(ip >> 24 & 0xff));

清单中需要android.permission.ACCESS\u WIFI\u状态权限。

您是否从“adb shell”中的“ifconfig”获得相同的地址?如果是这样的话,你的手机可能在NAT后面,这意味着你不能直接主持游戏。对于我们所有的noobs来说,这里有一个更详细的代码工作方式:D
String ipString = String.format(
"%d.%d.%d.%d",
(ip & 0xff),
(ip >> 8 & 0xff),
(ip >> 16 & 0xff),
(ip >> 24 & 0xff));