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

看板AndroidDev作者 (有些事,有時候。。。)時間12年前 (2012/03/14 23:26), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/4 (看更多)
※ 引述《Killercat (殺人貓™)》之銘言: : 正好有人在問這個,似乎也沒有人回答 : 我就我所知的來回答下好了 : 我先簡要的說一下原因,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) 把重要的事藏在後面,可能會有很多人沒看到呦。 雖然只有二句,但不想推文。因為這樣推文也可能被忽略了xd -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.55.154
文章代碼(AID): #1FOBYGgu (AndroidDev)
文章代碼(AID): #1FOBYGgu (AndroidDev)