Re: [問題] 有關socket inputstream和outputstream的問題
正好有人在問這個,似乎也沒有人回答
我就我所知的來回答下好了
我先簡要的說一下原因,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
03/14 21:14, 1F
推
03/14 21:44, , 2F
03/14 21:44, 2F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 2 之 4 篇):
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章