从服务器

时间:2015-11-02 11:02:17

标签: java web-services

我正在构建一个Web服务器和客户端,我将在Raspberry Pi上使用它。服务器是用Python编写的,每次客户端连接它时,它都会将数据返回给客户端。这很好用,当我通过浏览器访问服务器时,我看到了正确的数据,当我刷新页面时,我得到了新的数据,这样就可以了。

问题是我现在用Java编写客户端来访问服务器并收集数据。我在这里使用Java的原因是我在它中更有经验,我发现构建GUI更方便;我在树莓派上使用python,因为它为我提供了一种更简单的与硬件交互的方式。 我有的java客户端代码是:

while (true) {
    Socket socket = new Socket("192.168.0.37", 9315);
    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

    try {
        System.out.println("Getting");
        out.write("GIMME DATA!");
        out.flush();
        System.out.println("receiving");
        String data;
        while ((data = in.readLine()) != null) {
            System.out.println("Line: " + data);
        }
        socket.close();
        Thread.sleep(5000);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

这一切都运行良好,但我想从while循环中取出最初的3个对象(显然不会关闭连接)。当我这样做时,我只能访问服务器一次(它会给我正确的数据),在第二次运行时in.readling()将返回null,这很奇怪。似乎输入流只有初始运行的数据,并且没有更多的字节写入它。要清楚的是,当将最初的3个对象放入while循环时,一切都运行良好。

如何将对象取出循环?每次创建它们似乎都是浪费,耗时并且可能耗费内存......

1 个答案:

答案 0 :(得分:-1)

一旦到达文件末尾或BufferedReader到达数据末尾,那么如何从头开始再次打印数据。例如:

     int i = 0;
    BufferedReader br = new BufferedReader(new FileReader(new File("C:\\data.txt")));
    while (true) {

        String data = "";
        while ((data = br.readLine()) != null) {
            System.out.println(" data :" + data);
        }

        Thread.sleep(1000);
        i++;
        if (i == 2) {
            break;
        }
    }
    br.close();

在上面的程序中,br到达文件末尾,然后它不能指向开头。每次进入while循环时都必须创建BufferedReder对象。

相关问题