Re: [問題] 有關socket inputstream和outputstream的問題

看板AndroidDev作者 (殺人貓™)時間12年前 (2012/03/14 20:29), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/4 (看更多)
正好有人在問這個,似乎也沒有人回答 我就我所知的來回答下好了 我先簡要的說一下原因,internet protocol用來分隔的是CRLF(\r\n) 以及CRLFCRLF (後者用以區隔header跟content) PrintWriter的println (以及所有stream family的println, 比方說PrintStream) 所傳出的分隔都是依系統而變 珍惜生命 遠離println / printstream(全文完) - p.s. 你的out沒flush ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.252.25 基本上看到這裡應該就夠了,下面是比較詳細的說明 換行(也就是println會幫你做的事情)會幫你插入一個換行符號 而這個換行符號在各個系統都不一樣,所以基本上各個系統輸出都不同 比方說Windows就是CRLF(難得反而windows是正統的) 而unix系的含OSX絕大多數都是CR 這是java少數幾個無法跨平台的地方,你可以想像一下同樣一串碼 out.println("This is SPARTA!"); 其實在Windows底下是輸出 This is SPARTA!\r\n 而Unix系卻是 This is SPARTA!\r 這個println如果是輸出到螢幕上的話,沒差,大家看起來都一樣 阿輸出到socket就有差了,後者readline會根本讀不到 那當然照慣例就要問了:那要怎麼辦? 簡單,out.print("This is SPARTA!\r\n"); 當然還有另外一個錯誤就是你沒有out.flush(); 請銘記在心,寫Java Socket程式絕對要遠離任何println/printstream 看到他請當瘟神一樣離開他 謝謝觀賞(有人只看到上面嗎XD) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.252.25 ※ 編輯: Killercat 來自: 123.192.252.25 (03/14 20:29)

03/14 21:14, , 1F
差點只看到偽裝ww 感謝分享
03/14 21:14, 1F

03/14 21:44, , 2F
樓上 +1
03/14 21:44, 2F
文章代碼(AID): #1FO8yT7C (AndroidDev)
文章代碼(AID): #1FO8yT7C (AndroidDev)