我正在构建一个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();
}
}
这一切运作良好,但我想借此最初3名对象进行while循环的(很显然没有关闭连接)。当我这样做时,我只能访问服务器一次(它会给我正确的数据),第二次运行in.readling()
将返回null,这很奇怪。看起来inputstream只有初始运行的数据,并且没有更多的字节被写入。要清楚的是,将最初的3个对象放在while循环中时,一切运行良好。
如何将对象从循环中取出?它似乎浪费,耗时,并可能消耗内存消耗,每次创建它们...
我只是看着这个,因为它有一个python标签; Java并不是我最喜欢的混合,但是我猜想'in'会在第一次迭代中达到eof,并且会使第二次和后续调用中的readLine调用无条件地返回null .. –