看板 java 關於我們 聯絡資訊
今天練習了一個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
AI3767: out.write(s+"\n"); 11/13 01:39
Nt1:真是一語驚醒夢中人啊! 不過還是有個疑問,flush()不行嗎@@ 11/13 02:02
slalala:科 我上周才問這問題XD readline恩 11/13 02:17
cjcat2266:flush()應該是有沖出去,可是你的readLine()讀不到'\n' 11/13 02:32
ken915007:用OutputStream也可以… 11/13 09:06
Yshuan:我第一次寫socket好像碰過 之後都用樓上說的Stream系列 11/15 03:01