【问题标题】:Android : Modify the timeout of "getInputStream"Android:修改“getInputStream”的超时时间
【发布时间】:2017-07-27 13:47:36
【问题描述】:

我创建了一个新的 Socket 并使用它与服务器进行通信:

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 秒而不是 60 秒引发 ECONNRESET 异常?

【问题讨论】:

    标签: java android sockets connection timeout


    【解决方案1】:

    您可以使用以下方法设置所需的超时时间:

    mySocket.setSoTimeout(timeout_in_millis);

    但请记住,服务器设置的默认超时通常为 2 分钟,因此无论您设置什么超时,服务器都会在此之后关闭套接字。

    【讨论】:

    • setSoTimeout 不会影响断开连接时引发的 ECONNRESET 异常。
    • 你的意思是设置 mySocket.setSoTimeout(3000);不会让套接字在 3 秒后超时?
    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 2014-08-25
    • 2015-04-06
    • 1970-01-01
    • 2014-07-18
    • 2015-12-03
    相关资源
    最近更新 更多