看板 java 關於我們 聯絡資訊
※ 引述《slalala (no car ,no girlfriend )》之銘言: : sktReader = new BufferedReader(new InputStreamReader(skt.getInputStream())); : String message; : StringBuffer sb = new StringBuffer(); : while((message = sktReader.readLine()) != null) { : sb.append(message); : } : //讀完了 可是沒辦法到這邊 DEBUG時 確定卡在迴圈 : System.out.println("到這邊阿 打我阿笨蛋!"); : 請問這是什麼回事? 之前寫text file 讀寫都沒碰過這樣的問題 : 剛剛嘗試用read的方式 讀出字元 : 也是一樣 無法判斷 讀出來的int是否為-1 : 是不是socket有一些特性我沒釐清qq? : 煩請板上的高手教化我一下orz 遇到問題「為什麼沒有 null 或 -1 出現」, 您該在 google 之前先查手冊, http://java.sun.com/j2se/1.4.2/docs/api/java/io/ BufferedReader.html#readLine%28%29 <% Returns: A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached %> http://java.sun.com/j2se/1.4.2/docs/api/java/io/ Reader.html#read%28char[],%20int,%20int%29 <% Returns: The number of characters read, or -1 if the end of the stream has been reached %> 手冊說明了, null 或 -1 出現的條件。 另外,您提到良葛格檔案讀寫的範例, 我試著找一下: http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/ BufferedReaderWriter.htm 他有提到: <% 下次這個程式示範了BufferedReader與BufferedWriter的使用, 您可以在文字模式下輸入字元,程式會將您輸入的文字儲存至指 定的檔案中,如果要結束程式,null的判斷則依平台而有所不同 ,在UNIX-Like平台下,使用Ctrl+d 字元作為讀取結束或檔案結 束,在 Windows之下,則是在使用者按下Enter鍵後,接著Ctrl+ z表示讀取結束或檔案結束 %> 因為範例使用的是 System.in 作為輸入來源, 它不是一般的檔案,不會讀完後遇上檔案結束的符號。 因此,您需要自己製造這樣的符號。 到目前為止,至少能規納一些注意到的事: 1. 沒有遇到串流的終點,所以不會有 null 或 -1 出現 2. 能否自己製造串流的終點呢? 事實上,當 client 結束連線的時候,您會遇到 null http://pastie.org/689598 (test sample) 所以,您可以透過在 client 端呼叫 close() 來產生 null。 大致探索完滿足 end of stream 的情況後, 您得回到您正在處理的問題: 1. 目前的方式滿足你的需要:client 應該要主動關閉。 2. 目前的方式不符您的需要:client 不應該主動關閉。 您的需要為 1. 時,那麼 client.close() 就完成了。 您的需要為 2. 時,那麼您就不該以下列式子做為終止條件: ((message = sktReader.readLine()) != null) 您應該由 client 送來的內容作為判斷, 可以參考前一篇版友回應的: http://stackoverflow.com/questions/1577719/ java-sockets-bufferedreader-and-readline-hang http://tinyurl.com/yckcfqu 文中之到,以 Http Client 為例, 您可以在 Request Header 加上 Connection: close。 要求 Server 端處理完畢後結束連線。 雖然您的情況是相反的(您寫Server),但方式是一致的 「約定一個作為處理結束的符號」 ========================================================= 今天怎麼突然多話了起來呢? 上一篇 Let Me Google For You 雖然有答案, 但是,弟覺得在 Google 找解答前, 我們有該先讀閱的手冊,亦有該先自我思考、歸納的材料 順便分享一下文章: 對自己好一些:談技術手冊閱讀 http://blog.linux.org.tw/~jserv/archives/002008.html -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.165.131
AmosYang:期待 LMRTFMFY.com 的出現… XD 11/09 16:59
godfat:我又笑了 XDDDD 是不是還要有 LMWTFCFY.com 11/09 17:12
AmosYang:(叉題) 事實上 LMWTFCFY.com / LMDTFCFY.com 或許還蠻有 11/09 17:48
AmosYang:(搞笑)潛力的; LMRTFMFY.com 在技術上一下想不到該怎麼作 11/09 17:50
godfat:比方說把傳進去的文字用語音讀出來...XD 不知 D 是哪個字? 11/09 17:55
slalala:非常感謝 這篇對我受益良多 11/09 18:44
slalala:事實上我今天早上的解法也是約定一個終止符號ORZ 11/09 18:49
AmosYang: 'D'ebug XD 11/10 00:32
godfat:看來是我太久沒在板上debug了...XD一時只想到draw, display 11/10 00:56