Java — Android studio и NetBeans дают разные результаты с одной и той же библиотекой (NatTypeDetector)

#java #android #android-studio #netbeans #stun

Вопрос:

Попытался интегрировать библиотеку детекторов типов NAT и обнаружил, что есть разница в результатах между Android studio и NetBeans с библиотекой ниже, используя тот же код.

Ниже приведены библиотека, коды, результат и ожидаемый результат для обоих сценариев:

Типоразмер : https://github.com/cdnbye/NatTypeDetector

Android Studio (с соответствующими разрешениями в манифесте) :

 public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new stun1().executeOnExecutor(Executors.newScheduledThreadPool(1));
}

public class stun1 extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {
        String stunHost = "stun4.l.google.com";
        int stunPort = 19302;
        String localIP = "";
        try (final DatagramSocket socket = new DatagramSocket()) {
            socket.connect(InetAddress.getByName("8.8.8.8"), 10002);
            localIP = socket.getLocalAddress().getHostAddress();
        } catch (SocketException |
                UnknownHostException e) {
            e.printStackTrace();
        }

        try {
            System.out.println("STUN - localIP: "   localIP);
            StunResult result = StunClient.query(stunHost, stunPort, localIP);
            System.out.println("STUN - Nat type: "   result.getNatType());
            System.out.println("STUN - Public IP: "   result.getIpAddr());
        } catch (
                SocketException e) {
            e.printStackTrace();
        }
        return null;
    }
 }
}
 

AndroidManifest.xml

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 

NetBeans :

 public class main {

public static void main(String[] args) throws Exception {
        
    String stunHost = "stun4.l.google.com";
    int stunPort = 19302;
    String localIP = "";
    try (final DatagramSocket socket = new DatagramSocket()) 
    {
        socket.connect(InetAddress.getByName("8.8.8.8"), 10002);
        localIP = socket.getLocalAddress().getHostAddress();
    } catch (SocketException |UnknownHostException e) {
        e.printStackTrace();
    }

    try {
        System.out.println("STUN - localIP: "   localIP);
        StunResult result = StunClient.query(stunHost, stunPort, localIP);
        System.out.println("STUN - Nat type: "   result.getNatType());
        System.out.println("STUN - Public IP: "   result.getIpAddr());
    } catch (SocketException e) {
        e.printStackTrace();
    }
}}   
 

Результаты :

Студия Android

 I/System.out: STUN - localIP: 192.168.0.104 //expected result
I/System.out: STUN - Nat type: Unknown      //unexpected result
I/System.out: STUN - Public IP: null        //unexpected result
 

NetBeans (Ожидаемый результат) —

 STUN - localIP: 192.168.0.107 
doTransaction time 222
doTransaction time 215
STUN - Nat type: FullCone
STUN - Public IP: /60.xx.xxx.xxx:50xxx
 

Надеюсь выяснить, есть ли что-то, что я пропустил.

Комментарии:

1. Почему бы не отладить StunClient.java из той библиотеки с открытым исходным кодом, что у тебя есть? (Или добавьте инструкции по ведению журнала).