[問題] Socket中,PrintWriter.wirte()寫不出去?
今天練習了一個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
推
11/13 01:39, , 1F
11/13 01:39, 1F
→
11/13 02:02, , 2F
11/13 02:02, 2F
推
11/13 02:17, , 3F
11/13 02:17, 3F
推
11/13 02:32, , 4F
11/13 02:32, 4F
→
11/13 09:06, , 5F
11/13 09:06, 5F
推
11/15 03:01, , 6F
11/15 03:01, 6F