首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在读取套接字InputStream时创建超时

如何在读取套接字InputStream时创建超时
EN

Stack Overflow用户
提问于 2022-01-03 06:58:58
回答 1查看 58关注 0票数 0

我正在读太阳能转换器的一些值。如果太阳能转换器在传输过程中关闭,我的代码就会无休止地运行。

代码语言:javascript
复制
if (ping(ip)){
    socket = new Socket(ip, port);
    fromServer = socket.getInputStream();
    toServer = socket.getOutputStream();
    try {
        System.out.println("SEND MESSAGE");
        toServer.write(message.getBytes(Charset.forName(ANSI_CODE)));
    } catch (IOException e) {
       e.printStackTrace();         
    }
                                      
    message = "";
    while((i=fromServer.read())!=-1){
        // converts integer to character
        if (i == 0){
        }else{
            message += (char)i;
        }
    }
    System.out.println("MESSAGE RECEIVED");
}

如果太阳能转换器正在运行,代码工作得很好,但是如果因为太阳下山而关闭电源,它就会循环运行。它只在控制台上显示这个,不会抛出任何异常。

代码语言:javascript
复制
PING ... OK
SEND MESSAGE

我如何创建一种超时?

EN

回答 1

Stack Overflow用户

发布于 2022-01-03 07:07:39

若要在任何套接字上设置超时,可以使用socket.setSoTimeout(MILLISECONDS)作为指定的这里

这将导致套接字上的任何read()只持续给定的毫秒。注意,在执行阻塞操作之前,必须使用该函数。当时间结束时将抛出一个SocketTimeoutExeception。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70562531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档