getDhcpInfo在android中获取错误的ip地址

时间:2014-03-14 13:43:09

标签: android

我需要一些帮助。我试图在android中以编程方式获取wifi网络的网关和子网掩码详细信息,然后在我的应用程序中的其他位置使用获取的字符串。我在此站点上找到了一个解决方案到目前为止我已经实现了什么。但是设备上返回的IP地址与我在计算机上检查ipconfig时不同。所以我的应用程序崩溃了。 当我执行ipconfig时,我得到192.168.0.xx5,但是我在textview显示器上的活动显示了一个不同的192.168.0.xx1 ..但是因为我从我的xampp服务器下载数据,我需要它是相同的

以下是我的代码:

public class DHCPInfo extends Activity implements OnClickListener{
public String   s_dns1 ;
public String   s_dns2;     
public String   s_gateway;  
public String   s_ipAddress;        
public String   s_subnet;  
public String   s_serverAddress;


TextView dhcp_info,ip_address;

Button btn_dhcp;
@SuppressWarnings("deprecation")
DhcpInfo dhcpInfo;
WifiManager wifii;

final Handler h = new Handler();

/** Called when the activity is first created. */
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dhcp);



    wifii= (WifiManager) getSystemService(Context.WIFI_SERVICE);
    dhcpInfo=wifii.getDhcpInfo();

    s_dns1="DNS 1: "+String.valueOf(dhcpInfo.dns1);
    s_dns2="DNS 2: "+String.valueOf(dhcpInfo.dns2);    
    s_gateway="Default Gateway: "+String.valueOf(dhcpInfo.gateway);    
    s_ipAddress="IP Address: "+String.valueOf(dhcpInfo.ipAddress);     
    s_subnet="Subnet Mask: "+String.valueOf(dhcpInfo.netmask);    
    s_serverAddress="Server IP: "+String.valueOf(dhcpInfo.serverAddress);




    int ipAddress = dhcpInfo.ipAddress;
    intToIpAddress(ipAddress);



    //display them
    dhcp_info= (TextView) findViewById(R.id.text_dhcp);
    dhcp_info.setText("Network Info\n"+s_dns1+"\n"+s_dns2+"\n"+s_gateway+"\n"+s_ipAddress+"\n"+s_serverAddress);

    ip_address= (TextView) findViewById(R.id.text_ip);
    dhcp_info.setText("IP Address\n"+ intToIpAddress(ipAddress));

    btn_dhcp = (Button) findViewById(R.id.btn_dhcp);
    btn_dhcp.setOnClickListener(this);


}

 public String intToIpAddress(int ipAddress) {
    return  ((ipAddress & 0xFF) + "." + 
            ((ipAddress >>>= 8) & 0xFF) + "." + 
            ((ipAddress >>>= 8) & 0xFF) + "." + 
            ((ipAddress >>>= 8) & 0xFF));
}
}

1 个答案:

答案 0 :(得分:1)

据我所知,你有一台笔记本电脑和一部移动设备。两者都连接到相同的WiFi网络,您的笔记本电脑作为Web服务器工作。他们拥有不同的IP地址是正常的 - 因为它们毕竟是不同的设备。 :)

如果您的路由器向设备提供静态IP(这不太可能),您可以在Java代码中硬编码笔记本电脑的地址。这或多或少可以用于调试,但对于生产无用 - 因为应用程序仅在您将设备连接到当前的WiFi网络时才有效。

或者,您可以在Internet上访问Web应用程序(而不是仅使用本地网络)。如果您的ISP为您提供静态IP,您可以在笔记本电脑上托管该应用程序。否则你可以使用一些托管服务提供商 - 一些云服务也应该是一个好的解决方案而且相当便宜。