作者Nt1 (用功点吧!)
看板java
标题[问题] Socket中,PrintWriter.wirte()写不出去?
时间Fri Nov 13 00:46:20 2009
今天练习了一个socket的小程式,内容很简单
一支server.java,等待client连进来後,client发什麽文字,server就印什麽
一支client.java,连上server後,读使用者键入的文字写到outputstream
由server印出。
但是我碰到一个问题,先看一下code好了
#server.java
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String line;
while(true){
try{
line = in.readLine();
System.out.println(line);
if(line.equalsIgnoreCase("bye")){break;}
}
}
...下略
#clinet.java
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
System.out.print("you say:");
String s="";
while(true)
{
s = br.readLine();
if(s.equalsIgnoreCase("bye")){break;}
System.out.print("you say:");
out.println(s); //想问的是这里
}
如上,这样写的话一切正常,但我如果将注解那行code改成如下的话,会发生
「server 不会即时印出讯息,除非我输入"bye"中止连线,然後一口气印出所有的文字」
//修改後的code片段
out.write(s);
out.flush();
为什麽用out.write(),感觉讯息一直queue在buffer中出不去呢?flush也没用。
而用 out.print(),就可以正常运作
另外,若不用 PrintWrite,而改用 BufferedWriter的write方法去写,
也是会有如上讯息出不去的情况,请问这中间的运作原理是什麽呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.30.33
1F:推 AI3767: out.write(s+"\n"); 11/13 01:39
2F:→ Nt1:真是一语惊醒梦中人啊! 不过还是有个疑问,flush()不行吗@@ 11/13 02:02
3F:推 slalala:科 我上周才问这问题XD readline恩 11/13 02:17
4F:推 cjcat2266:flush()应该是有冲出去,可是你的readLine()读不到'\n' 11/13 02:32
5F:→ ken915007:用OutputStream也可以… 11/13 09:06
6F:推 Yshuan:我第一次写socket好像碰过 之後都用楼上说的Stream系列 11/15 03:01