Kiedy tworzę gniazdo:
Socket socket = new Socket(ipAddress, port);
Zgłasza wyjątek, który jest OK, ponieważ adres IP jest niedostępny. (Zmienne testowe, gdzie String ipAddress = "192.168.0.3"
i int port = 300
.)
Problem jest następujący: jak ustawić limit czasu dla tego gniazda?
Kiedy tworzę gniazdo, jak mogę skrócić czas, zanim otrzymam a UnknownHostException
i przekroczę limit czasu gniazda?
Odpowiedzi:
Zamiast tego użyj
Socket()
konstruktora iconnect(SocketAddress endpoint, int timeout)
metody .W twoim przypadku wyglądałoby to mniej więcej tak:
Socket socket = new Socket(); socket.connect(new InetSocketAddress(ipAddress, port), 1000);
Cytat z dokumentacji
źródło
socket.setSoTimeout(timeoutMillis)
przekroczenie limitu czasu podczas blokowania operacji we / wy.Nie ustawiasz limitu czasu dla gniazda, ustawiasz limit czasu dla operacji wykonywanych na tym gnieździe.
Na przykład
socket.connect(otherAddress, timeout)
Lub
socket.setSoTimeout(timeout)
do ustawiania limitu czasuread()
operacji.Zobacz: http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html
źródło
socket.setSoTimeout
musi zostać wywołane POconnect
, w przeciwnym razie nie będzie miało żadnego efektu i odczyty nigdy nie przekroczą limitu czasu. jest to jeden słabo udokumentowany problem.Możesz użyć następującego rozwiązania:
SocketAddress sockaddr = new InetSocketAddress(ip, port); // Create your socket Socket socket = new Socket(); // Connect with 10 s timeout socket.connect(sockaddr, 10000);
Mam nadzieję, że to pomoże!
źródło
connect()
metodą, ale nie pod kontrolą limitu czasu.Nie możesz kontrolować limitu czasu z powodu
UnknownHostException
. To są czasy DNS. Możesz kontrolować limit czasu połączenia tylko pod warunkiem posiadania prawidłowego hosta. Żadna z poprzednich odpowiedzi nie odnosi się poprawnie do tego punktu.Ale trudno mi uwierzyć, że naprawdę otrzymujesz
UnknownHostException
adres IP, a nie nazwę hosta.EDYCJA Aby kontrolować limity czasu DNS Javy, zobacz tę odpowiedź .
źródło
Użyj domyślnego konstruktora dla Socket, a następnie użyj metody connect () .
źródło