2016-04-29 55 views
0

我正在使用Java的小型服務器/客戶端應用程序(控制檯基礎)。該應用程序的目的是發送號碼從客戶端到服務器,並在服務器中添加(+1)並返回給客戶端。客戶端打印該行並向服務器發送增加的數字,直到它達到10.如何在Java中的PrintWriter之前使用BufferedReader

兩個類之間的連接正常,但是當我在PrintWriter之前將BufferedReader放在服務器類中時,該應用程序不起作用,不會引發任何錯誤。

客戶端代碼:

int count = 1; 
PrintWriter out = null; 
BufferedReader in = null; 

Socket socket = null; 

try { 
    socket = new Socket("localhost",3700); 
    in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    out = new PrintWriter(socket.getOutputStream());  
} catch (UnknownHostException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

while(in.read() != 10){ 
    out.println(count); 
    out.flush(); 
    System.out.print(in.read()); 
}; 

out.close(); 
in.close(); 
socket.close(); 

服務器代碼:

ServerSocket serverSocket = null; 
Socket socket = null; 
PrintWriter out = null; 
BufferedReader in = null; 
int count = 1; 

try { 
    serverSocket = new ServerSocket(3700); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
try { 
    socket = serverSocket.accept(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

out = new PrintWriter(socket.getOutputStream()); 
out.println(count); 
out.flush(); 

in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
while(in.read() != 10){ 
    count = in.read(); 
    count++; 
}; 

in.close(); 
out.close(); 

serverSocket.close(); 
socket.close(); 

回答

2
while(in.read() != 10){ 
    count = in.read(); 
    count++; 
}; 

您正在閱讀文字和扔掉,而你忽略流的末尾。它應該是:

int ch; 
while((ch = in.read()) !- -1 && ch != 10){ 
    count = ch; 
    count++; 
}; 

和類似的服務器端。 -1測試是流狀態的結束,當對等關閉連接時發生。

但更可能是你應該使用readLine()Integer.parseInt()

String line; 
while ((line = in.readLine()) != null) 
{ 
    int value = Integer.parseInt(line); 
    // etc. 
} 
+0

謝謝。它正在工作。但它只打印一行,最終結果是10.我使用'System.out.println(in.read());'在這段時間,但仍然只有一行。我需要在服務器端使用while循環嗎?還是我會忽略它? –

+1

這是因爲你正在閱讀另一個角色,正如我剛纔告訴你的那樣。它應該是'System.out.println(ch);'。 「服務器端類似」的部分「你不明白嗎? – EJP

相關問題