Программное подключение WiFi возвращает IP-адрес 0.0.0.0 - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь связать два устройства для обмена данными.Одно устройство действует как server and creates hot spot, а другая сторона действует как client и подключается к hot spot.Я программно подключаю устройство по этому коду.

addNetwork(WifiMgr.createWifiCfg(ssid, password, sType));

public static WifiConfiguration createWifiCfg(String ssid, String password, int type){
    WifiConfiguration config = new WifiConfiguration();
    config.allowedAuthAlgorithms.clear();
    config.allowedGroupCiphers.clear();
    config.allowedKeyManagement.clear();
    config.allowedPairwiseCiphers.clear();
    config.allowedProtocols.clear();

    config.SSID = "\"" + ssid + "\"";

    if(type == WIFICIPHER_NOPASS){
        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    }else if(type == WIFICIPHER_WEP){
        config.hiddenSSID = true;
        config.wepKeys[0]= "\""+password+"\"";
        config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        config.wepTxKeyIndex = 0;
    }else if(type == WIFICIPHER_WPA){
        config.preSharedKey = "\"" + password + "\"";
        config.status = WifiConfiguration.Status.ENABLED;
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
        config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
        config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
    }

    return config;
}

 public boolean addNetwork(WifiConfiguration wf){

    disconnectCurrentNetwork();


    int netId = mWifiManager.addNetwork(wf);
    boolean enable = mWifiManager.enableNetwork(netId, true);
    return enable;
}

Этот код успешно подключает устройства.На стороне клиента для связи мне нужен сервер IP address.Следующий код возвращает IP address

private InetAddress getReceiverIP() {
    final String address = Formatter.formatIpAddress(dhcp.gateway);// gateway - default gateway IP address
    InetAddress receiverIP = null;
    try {
        receiverIP = InetAddress.getByName(address);
        if(mDebug)
            Log.i("FileSender","Receiver Name : " + address);
            Log.i("FileSender","Receiver IP : " + receiverIP.toString());


    } catch (Exception e) {
        if(mDebug)
        Log.e("FileSender","Cannot find receiver's IP. Error : " + e.toString());
    }

    return receiverIP;
}

Проблема в том, что когда я подключаюсь к сети вручную, делая это с экрана настроек устройства, IP-адрес получателя принимается как 192.168.143.1, и данные успешно передаются.Но когда я подключаю устройства программно, даже после подключения, он дает IP-адрес как 0.0.0.0, и поэтому в соединении отказано.Пожалуйста, скажите мне, что я делаю не так.

...