【问题标题】:soTimeout starts ticking from the moment you call it?soTimeout 从您调用它的那一刻开始滴答作响?
【发布时间】:2017-02-05 20:53:44
【问题描述】:

这是对的吗?还是我在这里做错了什么?

这样设置超时,

client.setSoTimeout(1000);    // timeout after READ_SlEEP if the socket is idle

Thread.sleep(2000);

从套接字读取

public String receive(){
        inStream = telnetCreator.getInputStream(client);
        int buff;
        String MessageReceived ="";
        try{
                if (inStream.available() > 0){
                    buff = inStream.read();
                    MessageReceived += (char) buff;
                    System.out.println(MessageReceived);
                }
        }catch (Exception e){
            System.out.println("MessageReceived :- "+ MessageReceived);
            return MessageReceived;
        }
        return MessageReceived;
    }

由于我将超时设置为 1000 毫秒,然后休眠 2000 毫秒,因此套接字会抛出异常,因为读取的计时器已经超时。 这很烦人。所以现在我必须在使用接收之前设置超时,然后在每次接收后清除超时?

【问题讨论】:

    标签: java sockets networking connection timeout


    【解决方案1】:

    soTimeout 从你调用它的那一刻开始滴答作响?

    没有。它从您执行读取的那一刻开始滴答作响。

    因为我将超时设置为 1000 毫秒,然后休眠 2000 毫秒

    为什么?从字面上看,完全是浪费时间。

    套接字抛出异常,因为读取的计时器已经超时。

    不,它会引发异常,因为在您调用 read() 的那一刻起的一秒超时期间没有收到任何数据。

    这很烦人。

    这是非常愚蠢的代码。删除睡眠并将超时时间延长到现实。一秒对于读取超时来说太小了一个数量级l

    所以现在我必须在使用接收之前设置超时

    没有。

    然后在每次接收后清除超时?

    没有。

    【讨论】:

    • 1.我不想等待超过 1 秒。
    • 我正在尝试连接到远程登录服务器。我想发送一条消息,然后等待 1 秒等待回复。因此,服务器的请求响应之王。我必须多次这样做。但是如果我在两个请求-响应之间有一个睡眠,那么它会说读取超时
    猜你喜欢
    • 2013-07-07
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多