2014-02-05 70 views
3

這裏是TCPServer的一個簡單實現,我所要做的就是在請求時向客戶端發送一個字符串。使用轉義字符時不能發送完整字符串

import java.util.*; 
import java.io.*; 
import java.net.*; 
class TCPServer{ 
    public static void main(String args[]) throws Exception{ 
    ServerSocket server = new ServerSocket(4888); 
    while(true){ 
     Socket client = server.accept(); 
     DataOutputStream out = new DataOutputStream(client.getOutputStream()); 
     String send = "Bhushan Patil \n 11-237 \n CMPN"; 
     out.writeBytes(send); 
     } 
    } 
} 

但在客戶爲例方只布尚·帕蒂爾被顯示的字符串不休息。

這裏是客戶端的代碼。

import java.util.*; 
import java.io.*; 
import java.net.*; 
class TCPClient{ 
    public static void main(String args[]) throws Exception{ 
    Socket client = new Socket("localhost",4888); 
    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream ())); 
    String display = in.readLine(); 
    System.out.println(display); 
} 
} 

任何人都可以解釋它爲什麼會發生? 當我做

System.out.println(send); 

我得到整個字符串\ n所以我假設你沒有獲得新的生產線。糾正我,如果我錯了。感謝名單

回答

1

readLine讀取所有與換行符終止輸入的輸入數據。因此,您需要不斷從循環讀取客戶端的輸入。

while ((display = in.readLine()) != null) { 
    System.out.println(display); 
} 

還要確保從服務器關閉客戶端套接字以結束連接按Oracle's Sample Server

client.close(); 
2

更新如下客戶機代碼:

String display = null 
while ((display = in.readLine()) != null) 
    { 
     System.out.println(display); 
    } 
+0

它仍然無法正常工作 – Bhushan

+0

我得到的輸出 布尚·帕蒂爾 11-237 – Bhushan

+1

那麼客戶端掛起。它不終止abd不給最後一行CMPN – Bhushan

0

因爲in.readLine()只讀第一行。
你沒有閱讀其餘的行。 你需要循環拋出bufferreader來讀取所有行。
你在的System.out.println(發送)輸出

Bhushan Patil 
11-237 
CMPN 

其中包含將您的字符串轉換成多行和.readLine()功能一次讀取只有一行行字符。

您可以使用.read(char[] cbuf,int off,int len)來閱讀文本。
例如:

char[] cbuf = new char[1024]; 
while (in.read(cbuf, 0, cbuf.length) != null) { 
     String str = new String(cbuf); 
     System.out.print(str); 
} 
+0

你能給我一個片段,我可以用來測試?我試過掃描儀,但我無法顯示CMPN,並且我的客戶端掛起 – Bhushan

+0

使用while循環逐行讀取線。 –

+0

使用上面的代碼 String display = null; ((display = in.readLine())!= null) { System.out。的println(顯示器); } 不起作用 – Bhushan

相關問題