2014-01-06 57 views
-1

服務器使用線程接受多個連接。簡單套接字通信程序根本不工作

服務器:

@Override 
public void run() { 
    try { 
     System.out.println(client); 
     System.out.println("Client Connected"); 
     //So far, so good. Client is connected 

     BufferedReader in = new BufferedReader(
       new InputStreamReader(this.client.getInputStream())); 
     System.out.println(in.readLine()); 
     // Nothing happens 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

客戶:

try { 
     PrintWriter out = new PrintWriter(Client.socket.getOutputStream()); 
     BufferedReader in = new BufferedReader (
       new InputStreamReader(Client.socket.getInputStream())); 

     out.write("Information sent from client"); 
     // Does not work 
     in.read(); 
     // Before this .read it would give a "Connection reset" probably 
     // Because the client closed before the server could even read 
    } 

沒有錯誤,但它只是掛起,沒有被髮送。防火牆已關閉,所以它不可能是這樣。它也用於昨天工作。我不知道我可能搞砸了什麼。

+0

您是否嘗試過使用網貓來分別替換客戶端和服務器以查看哪些作品? – 735Tesla

+0

'readline()'依賴於換行符,按照文檔。你沒有發送一個,所以它會阻止並永遠不會返回。 –

回答

2

write只將內容寫入InputStream。使用println發送一個額外的換行符以對應於服務器上的readLine語句。

out.println("Information sent from client"); 
+0

哦,所以沒有換行字符意味着服務器只等到一個到來(這將永遠不會)?謝謝。作品。 – Kalec