2017-03-07 74 views
0

的我創建了一個新的Socket超時,並用它來與服務器進行通信:安卓:修改「的getInputStream」

mySocket = new Socket(); 
mySocket.connect(new InetSocketAddress(Network.SERVER_ADDRESS, Network.SERVER_PORT), (int) (3 * DateUtils.SECOND_IN_MILLIS)); 
mySocket.setSoTimeout(0); 

try { 
    while (!Thread.currentThread().isInterrupted()) { 
     ObjectInputStream objectInputStream = new ObjectInputStream(new BufferedInputStream(mySocket.getInputStream())); 
     MessageContent messageContent = (MessageContent) objectInputStream.readObject(); 
     Network._readMessage(context, messageContent); 
    } 
} 
catch (Exception exception) { 
    exception.printStackTrace(); 
} 

它工作正常。但是,當服務器變得不可用時,正好60秒後引發以下異常:

java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer) 

這是完全正常的行爲。沒關係。 但順便說一下,我的問題是:如何修改超時時間,以便斷開連接3秒後ECONNRESET異常而不是60秒?

回答

0

可以使用設置所需的超時:

mySocket.setSoTimeout(timeout_in_millis);

但請記住,默認的超時由服務器設置通常爲2分鐘,從而在服務器去後,關閉插座無論你設置什麼超時。

+0

setSoTimeout不會影響發生斷開連接時引發的ECONNRESET異常。 – Denis

+0

你的意思是設置mySocket.setSoTimeout(3000);不會讓套接字在3秒後超時? –