2011-08-08 113 views
0

我正在爲內部網絡應用程序之間的通信構建一個簡單的telnet連接守護進程,當我從BufferedReader讀取第一行時遇到了一個問題。BufferedReader流首次讀取的垃圾

此代碼片段並不完整,因爲其中有很多其他垃圾,所以我已將它剝離,只包含對象創建並從蒸汽中讀取。

in = new BufferedReader(new InputStreamReader(this.client.getInputStream())); 
out = new PrintWriter(this.client.getOutputStream(), true); 
String line; 

while (true) { 
    out.println(flag); // flag is just an integer    
    System.out.println(line); 
    // Processing the line and updating 'flag' accordingly 
} 

進入test進入telnet連接中所運行的程序的控制檯產生 v? v  v? v' ²? v? ²?test。這不會發生在第一個之後發送的行。

有沒有一種方法可以在用戶與它接口前清除垃圾,因此它不會與第一行一起發送?或者是由我的telnet客戶端引起的這個問題(當我編寫與此接口的客戶端時可能會解決這個問題)?

回答

4

我強烈懷疑這是telnet協議協商。理想情況下,你應該仔細閱讀RFC 854

請注意,您不應該只使用InputStreamReader沒有指定字符編碼 - 這是非常不可能的平臺默認的編碼是你想要的。

+0

我認爲你是對的,我應該一直在使用原材料,因爲我不是從協議利用什麼不能telnet(其實,我不知道爲什麼我把它叫做遠程登錄)。無論如何,我明白了,謝謝。 – SamT

+0

@SamT:'telnet'經常被用來作爲一個「普通的TCP/IP連接客戶端」,而它實際上* *爲非常具體的Telnet協議的客戶端(即幾乎沒有真正使用這些天)。 –

+0

@Joachim Sauer我不會說它'很難用'。你會驚訝於那裏的代碼數量,例如, TN3270到銀行後端。我現在有一個嵌入式Telnet客戶機/服務器的系統。 – EJP