2017-03-07 95 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秒后超时? –