Tôi đang cố gắng tìm hiểu xem các máy chủ cụ thể trên mạng của tôi có thể truy cập được không. mã java của tôi là như sau:Java InetAddress.isReachable() timeout
InetAddress adr = InetAddress.getByName(host);
if(adr.isReachable(3000)){
System.out.println(host + " is reachable");
}
này hoạt động khá tốt, tuy nhiên nếu tôi làm giảm thời gian chờ để nói 500ms thay vào đó, nó sẽ không chỉ dẫn chương trình có thể truy cập được nữa. Tôi có kế hoạch kiểm tra khá nhiều máy chủ trong một vòng lặp, do đó, có một thời gian chờ thấp là khá quan trọng. Nếu tôi ping host theo cách thủ công từ cửa sổ dòng lệnh, nó mất ít hơn 10ms.
Vậy tại sao phương pháp Java lại cần thời gian chờ cao hơn nhiều để thành công? Có cách nào khác để sử dụng isReachable()
không?
Cảm ơn, Về cơ bản có, tôi muốn kết nối với/kiểm tra máy chủ trên cổng 10001 được sử dụng bởi các thiết bị tôi cần tìm. Bạn có thể đưa ra một ví dụ về cách thực hiện kiểm tra cổng đã biết đó không? – Jerome
Vâng, tôi không đi vào thực hiện một phương pháp I/O không chặn (NIO). Nhưng tôi sẽ nói chỉ cần tạo một Socket. Tạo một SocketAddress với IP đích và cổng 10001. Sau đó gọi socket.connect (SocketAddress, timeout) với thời gian chờ thích hợp. Catch TimeOutException. Nếu socket.connect() trả về mà không có ngoại lệ, hãy đóng socket, bạn biết rằng thiết bị đang nghe trên 10001. Đối với một mô hình NIO, hãy xem dự án và các ví dụ mã nguồn mở Netty. – brettw