2016-03-04 113 views
1

我在使用Java的Socket時遇到問題。我想從CLIENT發送username到SERVER。Java Socket - 服務器沒有響應

在服務器上,我在檢查那裏不應該有任何其他用戶使用相同的username

用戶名存儲在HashMap

我從服務器發送消息給客戶端,這取決於以下條件

如果用戶使用相同的名稱存在:

重複的用戶名。再次嘗試

如果用戶不存在:

OK

客戶端驗證我們得到這消息是OK與否

問題是,當我從SERVER發送消息時,CLIENT沒有收到任何消息。

Client.java

System.out.println("Enter nickname: ");    
while(response == null || !response.equals("OK")) { 
    message = br.readLine(); // reading from standard input 
    out.println(message); 
    out.flush(); 
    response = in.readLine(); // here client is waiting for return message 
    System.out.println(response); 
} 

Server.java

username = input.readLine(); 
    while(clientOutputs.containsKey(username)) { 
     output.write("Duplicated username. Try again: "); 
     output.flush(); 
     username = input.readLine(); 
    } 
    output.write("OK"); 
    output.flush(); 
    clientOutputs.put(username, output); 
+1

在服務器端,也許你應該爲你寫的字符串添加一個換行符,或者使用'PrintWriter'和它的'println'方法,就像你在客戶端上做的那樣。 – Berger

+0

@Berger非常感謝你!我在服務器端使用了PrintWriter,但我不知道爲什麼我使用write函數而不是println。 – piotrb

回答

0

您正在閱讀行,但你是不是寫行。在OK消息中添加一個行結束符,以及來自該源的所有其他行。