3

我有以下问题,我的应用程序中有一个简单的 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;
    }
}
4

2 回答 2

2

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

于 2012-07-11T19:49:40.007 回答
-1

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

    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);
于 2012-07-14T23:11:37.210 回答