2009-03-13 30 views
8

Tôi không muốn nói một cách khó khăn rằng internet không khả dụng khi tôi bắt ngoại lệ từ url.openStream().Làm cách nào để kiểm tra tính khả dụng của Internet trong Java?

Có cách nào đơn giản để biết liệu máy tính có được kết nối với Internet bằng Java không? Trong trường hợp này, "được kết nối với internet" có nghĩa là có thể tải xuống dữ liệu từ một url cụ thể.

Nếu tôi cố gắng tải xuống và không có sẵn, thì chương trình sẽ bị treo một chút. Tôi không muốn treo. Vì vậy, tôi cần một cách nhanh chóng để truy vấn liệu trang web có sẵn hay không.

Trả lời

10

Sự cố bạn đang cố gắng tránh đang chờ kết nối http của bạn để xác định rằng URL bạn đang cố truy cập thực sự không khả dụng. Để đạt được điều này, bạn cần phải ngừng sử dụng url.openStream() là một phím tắt cho openConnection(). GetInputStream() và kiểm soát tốt hơn kết nối của bạn.

URLConnection conn = url.openConnection(); 
conn.setConnectTimeout(timeoutMs); 
conn.setReadTimeout(timeoutMs); 
in = conn.getInputStream(); 

Mã này sẽ cho phép bạn hết thời gian chờ kết nối nếu kết nối hoặc đọc vượt quá thời gian bạn cung cấp trong tham số timeoutMs.

+0

đây chỉ là giải pháp tầm thường vì bạn vẫn sẽ bị "treo" trừ khi bạn làm điều này trong một chủ đề. – Chii

+0

Bạn có thể đề xuất một cái tốt hơn không? Tôi đã sử dụng một chuỗi riêng biệt để tải xuống dữ liệu. – Penchant

2

Bạn có thể biết liệu một bộ định tuyến có được kết nối với mạng hay không, ngay cả khi nó không đảm bảo mạng đang hoạt động hoặc kết nối với internet.

Đây là một trong những vấn đề "hút và xem".

Có vấn đề gì khi cố kết nối? Và tại sao bạn lo lắng liệu họ có kết nối với Internet không?

4

Không có điều gì là "Tính khả dụng của Internet". Hãy tưởng tượng rằng yêu cầu HTTP của bạn đi qua proxy HTTP trong suốt, bạn đang cố truy cập một trang web bị liệt vào danh sách đen và bạn nhận được phản hồi HTTP từ máy chủ proxy cho bạn biết về quyền truy cập bị từ chối. Internet có sẵn trong tình huống này hay không?

Tôi nghĩ bạn sẽ cụ thể hơn về vấn đề của mình.

+0

Đây là một câu trả lời tuyệt vời và một điểm quan trọng. – jayunit100

0

Bạn có thể gửi một thông điệp ICMP đến một máy chủ rất nổi tiếng ...

+0

Rất nhiều mạng, đặc biệt là mạng công ty, chặn lưu lượng ICMP. – cletus

+0

@cletus anh ta nói rất "nổi tiếng" ... vì vậy nó được cho là một máy chủ cho phép lưu lượng ICMP :) – rogeriopvl

0

Bạn có thể kiểm tra một NTP server nếu tường lửa của bạn không cấm.

Bất kỳ cách nào tôi nghĩ tùy chọn tốt nhất là cố gắng mở URL khi bạn cố gắng tránh, vì dịch vụ này thường được mở nhất.

Bạn có thể kiểm tra một hoặc hai URL động thay đổi liên tục. Đối với instace, một số trang web cho thấy thời gian. Ví dụ: this one tôi đã tìm thấy googleing. Nhiều hơn một vì các trang web có thể xuống ;-)

1

Tôi không biết nhiều về đường ống cấp HTTP HTTP có sẵn trong Java, nhưng bạn luôn có thể đưa ra yêu cầu HEAD http cho url trước. Điều này làm cho máy chủ chỉ gửi lại tiêu đề chứ không phải dữ liệu. Với thời gian chờ 1-3 giây, bạn sẽ có thể tránh được bất kỳ sự chậm trễ kéo dài nào.

2

Nếu tiêu chí là liệu bạn có thể truy cập một máy chủ web cụ thể là cách duy nhất để tìm hiểu, là truy cập vào máy chủ web đó.

Tuy nhiên, bạn có thể làm điều đó trong chuỗi nền khi khởi động để ứng dụng không bị trì hoãn. Sau đó, câu trả lời "có/không" có sẵn khi tải xuống thực tế là mong muốn. Đặt một thông báo trong dòng trạng thái để người dùng biết điều gì đang diễn ra và không ngạc nhiên về việc không kết nối "kết nối với mạng" nếu người đó không được kết nối khi chương trình của bạn được bắt đầu.

1

Nếu chương trình của bạn đang treo trong khi chờ tải xuống thì có thể bạn đang sử dụng chuỗi GUI để thực hiện tải xuống. Nếu bạn sử dụng chuỗi nền, chương trình của bạn sẽ không treo ngay cả khi mất nhiều thời gian để hết thời gian chờ tải xuống.

5

Sử dụng

Process p1 = java.lang.Runtime.getRuntime().exec("ping www.google.com"); 
System.out.println(p1.waitFor()); 
// return code for p1 will be 0 if internet is connected, else it will be 1 
+0

Naga Rishi. Cảm ơn bạn. Câu trả lời tốt. – pudaykiran

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