如果使用缓冲读取器读取整行,是否会在套接字上设置超时?

时间:2011-10-25 14:45:08

标签: java sockets

我正在编写一个套接字客户端,它在套接字连接中发送一行,然后等待最多45秒,以便从服务器返回一行。

我正在使用像这样的缓冲读卡器:

Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
            socket = new Socket(host, 800);
            out = new PrintWriter(socket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                                        socket.getInputStream()));
} catch (UnknownHostException e) {
            listener.failedToConnectToHost(e);
            return;
} catch (IOException e) {
            listener.failedToConnectToHost(e);
        return;
}

        BufferedReader stdIn = new BufferedReader(
                new InputStreamReader(System.in));
        out.println("message");
try {
        String response = in.readLine();
        listener.responseRecived(response);
        return;
} catch (IOException e) {
        listener.errorReadingResponse(e);
        return;
}

如果我添加以下行(或类似的东西)

socket.setSoTimeout(45000);

假设从另一端没有任何东西通过,45秒后会发生什么?

我想我会抓住一个中断的异常,但我确定?

这甚至会起作用吗? setSOTImeOut()的文档暗示它的socket.read()将超时,我假设缓冲的读者在堆栈的某处调用它,但假设是所有搞砸的母亲,所以我只想检查。 / p>

2 个答案:

答案 0 :(得分:3)

BufferedReader.readLine()方法会在45秒后抛出SocketTimeoutException

答案 1 :(得分:0)

显然它确实有效并且你得到一个SocketTimeoutException。