2013-03-19 71 views
1

使用ServerSocketBufferedReader.readLine()只有在客戶端的線路終止時纔會讀取輸入,是否有讀取輸入並在線路終止之前發送輸出?比BufferedReader.readLine()更好的方法?

ServerSocket SRVSOCK = new ServerSocket(35553); 
while(true){ 
    Socket SOCK = SRVSOCK.accept(); 
    InputStreamReader IR = new InputStreamReader(SOCK.getInputStream()); 
    BufferedReader BR = new BufferedReader(IR); 

    String MESSAGE = BR.readLine(); 

    PrintStream PS = new PrintStream(SOCK.getOutputStream()); 
    System.out.println(MESSAGE); 
    PS.print("Returned Successfully"); 
} 
+0

如何被髮送的數據?它是否在客戶端緩衝? – dacwe 2013-03-19 11:07:37

+0

@dacwe這是我不知道的部分,我所知道的是當客戶端終止該線時服務器收到數據。 – user2186161 2013-03-19 11:21:15

+0

@ user2186161只是根據java代碼約定的一個建議變量跟隨類似於句子的情況,即在雙變量的情況下新詞的首字母大寫。你可以使用例如:ServerSocket serverSocket = new ServerSocket(35553);畢竟,遵循代碼慣例是很好的,而不是所有的資本變量。 – Lakshmi 2013-03-19 11:37:51

回答

0

你可以用bufferedReader.read()去將返回值一個字符時

StringBuffer response = "";  

while ((c = bufferedReader.read()) != -1) 
{ 
     //Since c is an integer, cast it to a char. If it isn't -1, it will be in the correct range of char. 
     response.append((char)c) ; 
} 

如果你用這種方法去,就看你要弄清楚的時候就可以開始解析結果併發送回復。

+0

我不擅長char,response.append說_方法append(char)對於String_類型是未定義的。響應是一個字符串? – user2186161 2013-03-19 11:19:38

+0

它應該是(請參見示例中的定義) – 2013-03-19 11:20:48

+0

我意識到我忘記了大寫'String' – 2013-03-19 11:21:11

0

看一看this回答。

您可以將輸入讀取到大小受您控制的緩衝區中。

(道歉,如果鏈接到自己的答案被認爲是不好。感覺就像重新使用。我們的開發者畢竟。)

+0

它工作得很好,thx :) – user2186161 2013-03-19 11:37:53

+0

這是肯定不壞,鏈接到現有的答案!如果它是你的或不是無關緊要,只要它對實際問題有貢獻。 – user905686 2013-03-19 12:41:24