求高手点拨Socket通信中的一个“字节流文本传输代码实现效果与预期不符”的问题原因..高手,您好:我在写一个S
求高手点拨Socket通信中的一个“字节流文本传输代码实现效果与预期不符”的问题原因..
高手,您好:
我在写一个Socket通信程序,现在我碰到了一个问题..
在进行Socket通信的时候,我写出了一个C端的测试类,源代码如下:
希望高手能够点拨:
为什么我的C端的写出数据为:
“CJ必胜!!CJCO!!CJHMF,这个问题解决了,我高兴了,今天我建群,加入了130个人\r\n我们群里的人,都决心互相学习,增长本领”.
在我的S端的console窗口中的输出却为:
“我们群里的人,都决心互相学习,增长本领”.
少了前面的:
“CJ必胜!!CJCO!!CJHMF,这个问题解决了,我高兴了,今天我建群,加入了130个人\r\n”.
的字符串数据...
希望高手能够点拨我这个问题出现的原因..
谢谢高手!!
一百分奉上!!
一位求知者
2013年11月4日中午12点44分 socket thread Java调试 Java异常 Java排错
[解决办法]
\r\n 换行导致的。console欺骗了你
[解决办法]
这个不是你的问题,是JDK的原因。你可以查下,println的源代码,最终你可以追踪到一个叫write的函数,其代码是
private void write(String s) {
try {
synchronized (this) {
ensureOpen();
textOut.write(s);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush && (s.indexOf('\n') >= 0))
out.flush();
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
trouble = true;
}
}在if判断里,很清楚地看到,如果\n的位置在s中的位置>=0的话,那么输出就flush掉了。所以,按照你在客户端的输入字符串来看,\n之前的字符串是被自动flush掉了,因此没有显示。想解决这个问题,估计你要自己重写System中print函数了。[解决办法]
楼上的意思:你的客户端已经接收到数据了,只是没有打印出来而已,问题出现在了println上了
