2016-03-03 43 views
2

我正在製作一個客戶端服務器應用程序,並使用以下代碼來交換服務器和客戶端的數據。無法使用套接字上的BufferedReader/Writer發送和接收數據

服務器的發送和接收代碼:

public void run() { 
    try { 
     BufferedReader input = new BufferedReader(new InputStreamReader(socketNew.getInputStream())); 
     String message=input.readLine(); 
     while(message.length()!=0) 
     { 
      for(Socket s:socs) //socs is a list containing all the connected sockets 
      { 
       BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); 
       writer.write(message); 
      } 
     } 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    } 

客戶端的發送方法:

private void send_data() { 

    BufferedWriter writer; 
    try { 
     writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
     writer.write(this.name+textField.getText()); 
     textField.setText(""); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

客戶的獲得方法:

public void receive_data(){ 
    BufferedReader input; 
    try { 
     input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     String message=input.readLine(); 
     while(message.length()!=0) 
     {console(message);} 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

我沒有任何數據交換的B/W的服務器和clients.Can有人可以幫我嗎?

回答

3

您正在遭受緩衝:消息寫入緩衝區,可能永遠不會發送。沖洗筆者以確保它發送數據:

writer.write(...); 
    writer.flush(); 

此外,BufferedReader.readLine讀取行。行必須以換行符結尾,例如\n。目前還不清楚您是否正在發送換行符。

此外,這是一個無限循環:

String message=input.readLine(); 
    while(message.length()!=0) { 
     /* code that does not modify message */ 
    } 
+0

我做到了,但無濟於事。 –

+0

沒有足夠的信息來幫助你進一步。嘗試調試您的代碼。 – Joni

+0

我在最後添加了斷路器,瞧,問題得到了解決。感謝man.I也必須稍微改變一下代碼,因爲每次用戶想要發送和接收數據時都會創建新的緩衝區。一個問題。再次感謝人。 –

1

不要將創造新的讀者和作家。對於插座的使用壽命使用相同的。您丟失的舊版BufferedReader中的數據正在丟失。這些緩衝的東西,錯誤,緩衝區。

而且這樣的:

String message=input.readLine(); 
while(message.length()!=0) 

是,呃,廢話。首先,你不檢查messagenull,所以你會得到一個NullPointerException結束流。其次,你沒有在循環內進行任何進一步的輸入,所以如果它不拋出NPE並且消息不是零長度,它將永遠循環。

+0

我在最後添加了斷路器,瞧,問題得到解決。謝謝man.I也必須稍微改變一下代碼,因爲我每次用戶想要發送和接收數據時都會創建新的緩衝區。一個問題。再次感謝人。 –

+0

現在我遇到了另一個問題。我以某種方式編寫了應用程序,當我按下回車鍵時,郵件就會發送到服務器。我必須打兩次郵件才能發送郵件。任何建議? –