2016-09-20 21 views
7

Tôi đang sử dụng đoạn mã sau để gửi DatagramPacket đến một địa chỉ nhất định:Gửi DatagramPacket không có kết nối internet - Android

InetAddress address = InetAddress.getByName(anIPAddress); 

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

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

Nó hoạt động tốt, nhưng làm thế nào đến mã này không ném bất kỳ Exception khi không có kết nối internet có sẵn?

Tôi tắt cả Wi-Fi và dữ liệu di động và mã này vẫn được thực thi mà không có bất kỳ lỗi nào.

Có cách nào để đảm bảo rằng gói thực sự được gửi không?

(tôi không quan tâm nếu nó đạt đến đích hay không, tôi chỉ muốn chắc chắn rằng nó được gửi)

+1

Gói dữ liệu có thể được gửi qua máy chủ cục bộ. Vì vậy, một kết nối Internet là không cần thiết để gửi các gói Datagram. – Sedrick

+0

Kiểm tra điều này. http://www.java2s.com/Code/Java/Network-Protocol/UseDatagramSockettosendoutandreceiveDatagramPacket.htm – Sedrick

+0

tạo hai chương trình java. Một chatclient và một charserver và xem chúng giao tiếp. – Sedrick

Trả lời

1

Bạn có thể sử dụng để kiểm tra những gì NetworkInterface.getNetworkInterfaces(); giao diện có sẵn. Sau đó, bạn có thể kiểm tra với 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

Kết nối ổ cắm datagram với đích. Sau đó, sau khi một vài gửi bạn có thể nhận được một ngoại lệ. Nếu ổ cắm datagram không được kết nối có một lỗi định tuyến vấn đề mà tôi không thể nhớ offhand: Tôi sẽ chỉnh sửa nó trong khi au có được một cơ hội để tìm nó lên.

Và có, tôi biết UDP là giao thức không kết nối. Nhưng bạn vẫn có thể kết nối ổ cắm UDP.

Các vấn đề liên quan