2016-09-20 11 views
7

Używam następujący kod do wysyłania DatagramPacket na dany adres:Wysyłanie DatagramPacket bez połączenia internetowego - Android

InetAddress address = InetAddress.getByName(anIPAddress); 

DatagramSocket socket = new DatagramSocket(); 
DatagramPacket packet = new DatagramPacket(packetBytes, packetBytes.length, 
    address, port); 

socket.send(packet); 
socket.close(); 

To działa dobrze, ale dlaczego ten kod nie rzucać żadnych Exception gdy nie ma dostępne połączenie internetowe?

Wyłączyłem zarówno dane Wi-Fi, jak i komórkowe, a ten kod nadal jest wykonywany bez żadnych błędów.

Czy istnieje sposób, aby upewnić się, że pakiet jest rzeczywiście wysyłany?

(i nie obchodzi mnie, czy to dotarły do ​​miejsca przeznaczenia, czy nie, chciałbym tylko się upewnić, że jest wysyłany)

+1

Pakiety datagramów mogą być wysyłane przez localhost. Dlatego połączenie internetowe nie jest konieczne do wysyłania pakietów Datagram. – Sedrick

+0

Sprawdź to. http://www.java2s.com/Code/Java/Network-Protocol/UseDatagramSockettosendreiveiveDatagramPacket.htm – Sedrick

+0

utworzyć dwa programy java. Jeden chatclient i jeden charserver i zobacz, jak się komunikują. – Sedrick

Odpowiedz

1

Można użyć NetworkInterface.getNetworkInterfaces(); by sprawdzić jakie są dostępne interfejsy. Następnie można sprawdzić za pomocą ni.isUp().

Enumeration<NetworkInterface> nets=NetworkInterface.getNetworkInterfaces(); 
for(int i=0; nets.hasMoreElements(); ++i) { 
    NetworkInterface ni=nets.nextElement(); 
    if (ni.isUp() && !ni.getName().equals("lo")) { 
     //ni is not local 
     break; 
    } 
} 
0

Podłącz gniazdo datagramowe do miejsca docelowego. Następnie po kilku wysyłkach możesz otrzymać wyjątek. Jeśli gniazdo datagramowe nie jest podłączone, wystąpił problem z routingiem błędów, którego nie pamiętam od ręki: będę go edytować, gdy au będzie miał szansę na sprawdzenie.

I tak wiem, że UDP jest protokołem bezpołączeniowym. Ale nadal możesz podłączyć gniazdo UDP.

Powiązane problemy