为什么非要关闭输出流才能写出所有数据啊
[color=blue][b]
哦,不好意思。我看错了,你是从System.in得到的数据。
错误在你的bw写出数据,你没有写出换行符,因为你用的是write,但是你的服务器端,用的是readLine,是根据换行符读取的。[/b][/color]
[code="java"]while((str=br.readLine())!=null){
bw.write(str);
}
// 写出一个换行符
bw.newLine();
bw.flush(); [/code]
什么输出流? 不通的输出流的实现不同。 关闭操作都有,标示一次操作完成。
因为操作系统将数据写入到硬盘上时,有个缓冲区,如果没有明确的要求理解写入,数据先放入到缓冲区中,然后待缓存区满的时候,操作系统会自动的将数据写入到硬盘。
所以如果不调用flush或者close,这些数据就会存在于缓冲区中,没有写入到硬盘中。
你的Client在等待读Server的发来的信息,而Server又在等待Client发来的信息。
Client和Server也读不到内容,都在堵塞地等待对方。
长连接,且实时通信你可以换成管道流。 或每次循环都执行开关流操作。
换行是个好办法。