#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 из той библиотеки с открытым исходным кодом, что у тебя есть? (Или добавьте инструкции по ведению журнала).