我正在構建一個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 .. –