Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java util扫描程序超时?_Java_Java.util.scanner_Bufferedreader - Fatal编程技术网

java util扫描程序超时?

java util扫描程序超时?,java,java.util.scanner,bufferedreader,Java,Java.util.scanner,Bufferedreader,我有以下问题,我的应用程序中有一个简单的TCP类,它向设备发送一条消息进行查询,然后设备用消息进行响应,但是没有任何描述的行尾字符,因为它来自串行转换器,在最初尝试使用readline函数并发现它在输出前需要eol字符后,我尝试了扫描仪功能,该功能工作正常,除非设备出于某种原因没有响应该请求,否则我的应用程序将冻结,是否可以在扫描仪功能上设置一个超时,这样它就可以断开连接并继续运行,或者有更好的方法来做到这一点?我的代码如下: public String Send_TCP ( InetAddre

我有以下问题,我的应用程序中有一个简单的TCP类,它向设备发送一条消息进行查询,然后设备用消息进行响应,但是没有任何描述的行尾字符,因为它来自串行转换器,在最初尝试使用readline函数并发现它在输出前需要eol字符后,我尝试了扫描仪功能,该功能工作正常,除非设备出于某种原因没有响应该请求,否则我的应用程序将冻结,是否可以在扫描仪功能上设置一个超时,这样它就可以断开连接并继续运行,或者有更好的方法来做到这一点?我的代码如下:

public String Send_TCP ( InetAddress IPAddress, int POrt, String InData) throws IOException
         {      

        Socket socket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            socket = new Socket(IPAddress, POrt);
            out = new PrintWriter(socket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection");
            System.exit(1);
        }

        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
        ;

        System.out.print("Connected, Sending:"+ InData);

        out.println(InData);
        System.out.println("Equals");
        String str1 = new Scanner(in).useDelimiter(">").next() + ">";
        System.out.println(str1);
        System.out.println("Equals");
        out.close();
        in.close();
        read.close();
        socket.close();
        return str1;
    }
}

我不确定是否正确理解了您的问题,但您可以在套接字上设置超时:
socket.setSoTimeout(int timeout)

请参阅:

我相信以下内容可以实现我所需要的,基本上是检查缓冲区是否存在,如果缓冲区不存在,那么它会等待并再次检查,以避免扫描功能的陷阱,如果消息在读取时从未到达

    try {
    BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
    int count = 1;

        do { 
            if (rd.ready()){
                System.out.println ("Response Ready");
                str = new Scanner(rd).useDelimiter(">").next()+">";
                count = 501;
            }
            Thread.sleep(10);
            System.out.println ("Response Not Ready" + count);
            count ++;
        } while (count < 25);
试试看{
BufferedReader rd=新的BufferedReader(新的InputStreamReader(sock.getInputStream());
整数计数=1;
做{
if(rd.ready()){
System.out.println(“响应就绪”);
str=新扫描仪(rd).useDelimiter(“>”).next()+“>”;
计数=501;
}
睡眠(10);
System.out.println(“响应未就绪”+计数);
计数++;
}而(计数<25);

谢谢,我现在已经尝试过了,但不幸的是它不起作用,问题是当它击中扫描仪时,如果扫描仪是空的,那么程序会等待,防止套接字在空闲超时时关闭。基本上,我需要的是,如果扫描仪发现缓冲读卡器是空的,那么在停止之前继续检查指定的超时然后关闭连接。