0
我正在嘗試創建文件共享Java應用程序。 我正在做兩個獨立的項目,服務器和客戶端。服務器端存儲了文件,客戶端可能會請求從服務器下載文件,或將文件上傳到服務器,或者從服務器檢索文件列表。從服務器檢索字符串
我在從服務器檢索文件時遇到問題。我做了一個方法來檢索文件,但是當方法運行時,程序掛起,沒有任何響應。
這裏是我的檢索文件中的代碼(客戶端,很明顯):
public void retrieveFileData() throws IOException {
Socket theSocket = new Socket(this.theHostIP, this.portNumber);
PrintWriter messageWriter = new PrintWriter(theSocket.getOutputStream(),
true);
messageWriter.write("REFRESH");
BufferedReader filesReader = new BufferedReader(new InputStreamReader(
theSocket.getInputStream()));
this.retrievedFiles = filesReader.readLine();
theSocket.close();
}
下面是服務器端的代碼:
ServerSocket theServerSocket = new ServerSocket(this.portNumber);
Socket theClientSocket = theServerSocket.accept();
BufferedReader inputReader = new BufferedReader(new InputStreamReader(
theClientSocket.getInputStream()));
PrintWriter outputWriter = new PrintWriter(
theClientSocket.getOutputStream(), true);
String line = inputReader.readLine();
while (true) {
if (line.startsWith("REFRESH")) {
System.out.println("received refresh request...");
outputWriter.write(this.filesToSend);
}
所以,基本上,客戶端發送一個簡單的消息告訴服務器它想要什麼(在這種情況下,「REFRESH」來檢索文件列表),服務器應該使用其輸出寫入器將其提供給客戶端。
我在做什麼錯?我懷疑問題出在客戶端,因爲「接收到刷新請求...」不能在控制檯中打印。
謝謝。
我想的PrintWriter outputWriter =新的PrintWriter( theClientSocket.getOutputStream(),TRUE);此聲明使PrintWriter自動刷新。我看到這是不正確的。非常感謝。 –
好的。這是真的,但那麼你應該println,以便它創建一個換行符。或者寫入(「REFRESH \ n」);也會有效。請參閱javadoc「autoFlush - 布爾值;如果爲true,則println,printf或format方法將刷新輸出緩衝區」。所以當你使用簡單的寫法時不行。 – Wouter