2012-12-06 9 views
5

Powiedz, że mam zmienną gniazda o nazwie SuperSocket jest jakiś sposób, że mogę złapać wyjątek timeout?Jak złapać wyjątek SocketTimeoutException

 SuperSocket.setSoTimeout(5000); 

     catch (SocketTimeoutException e){ 
     System.out.println("Timeout"); 
     System.exit(1); 
    } 
+2

Ty * łapiesz to. Jakie jest pytanie? – EJP

+0

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ć. –

+0

@BrianRoach Prawdopodobnie wystarczająco dobrze zgadnij. Nie zawracam sobie głowy, sam. – EJP

Odpowiedz

4

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.

Powiązane problemy