Wydaje się nie rozumieć, co robi i kiedy setSoTimeout()
że wyjątek zostanie rzucony.
Z Javadoc: (http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html)
public void setSoTimeout (int timeout)
rzuca SocketException
Włączanie/wyłączanie SO_TIMEOUT z określonego limitu czasu w milisekundach. Po ustawieniu tej opcji na niezerowy limit czasu wywołanie read() na InputStream skojarzonym z tym gniazdem będzie blokować tylko ten czas wynoszący . Jeśli upłynie limit czasu, podniesiony zostanie wyjątek java.net.SocketTimeoutException o numerze , mimo że gniazdo nadal ma wartość . Opcję tę należy włączyć przed rozpoczęciem operacji blokowania, aby uzyskać efekt. Limit czasu musi być> 0. Limit czasu zerowego jest interpretowany jako nieskończony limit czasu.
Jedynym razem SocketTimeoutException
może być rzucony (a następnie złapany) kiedy robisz blokowanie przeczytać na Socket
„s bazowego InputStream
i nie jest odbierany danych w określonym czasie (powodując odczytu do. .. koniec czasu).
superSocket.setSoTimeout(5000);
InputStream is = superSocket.getInputStream();
int i;
try {
i = is.read();
} catch (SocketTimeoutException ste) {
System.out.println("I timed out!");
}
Edycja dodać: Jest rzeczywiście jedna godzina Wyjątkiem mogą być wyrzucane, a to jeśli dzwonisz wersję dwa argument Socket.connect()
gdzie dostarczamy timeout.
Ty * łapiesz to. Jakie jest pytanie? – EJP
Mój Spidey Sense mówi mi, że OP nie rozumie, co robi 'setSoTimeout', i że będziesz musiał ** zrobić ** coś z' Socket', które może przerwać i rzucić ten wyjątek zanim zostaniesz w stanie go złapać. –
@BrianRoach Prawdopodobnie wystarczająco dobrze zgadnij. Nie zawracam sobie głowy, sam. – EJP