soTimeout从你打电话的那一刻开始滴答作响?

时间:2016-09-28 04:17:25

标签: java sockets networking connection timeout

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

将超时设置为,

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毫秒,因此套接字会抛出异常,因为读取时的计时器已经超时。 这非常令人恼火。所以现在我必须在使用receive之前设置超时,然后在每次接收后清除超时?

1 个答案:

答案 0 :(得分:0)

  

soTimeout从你打电话的那一刻开始滴答作响?

没有。它从您执行读取的那一刻开始计时。

  

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

为什么呢?完全浪费时间,确切地说。

  

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

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

  

这非常令人恼火。

这是非常愚蠢的代码。移除睡眠并将超时延长到逼真的状态。一秒钟的数量级对于读取超时来说太小了

  

所以现在我必须在使用receive

之前设置超时

没有

  

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

没有