作者Killercat (杀人猫™)
看板AndroidDev
标题Re: [问题] 有关socket inputstream和outputstream的问题
时间Wed Mar 14 20:29:15 2012
正好有人在问这个,似乎也没有人回答
我就我所知的来回答下好了
我先简要的说一下原因,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)
1F:→ Eior:差点只看到伪装ww 感谢分享 03/14 21:14
2F:推 jakevin:楼上 +1 03/14 21:44