[問題] Socket中,PrintWriter.wirte()寫不出去?

看板java作者 (用功點吧!)時間16年前 (2009/11/13 00:46), 編輯推噓4(402)
留言6則, 6人參與, 最新討論串1/1
今天練習了一個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
out.write(s+"\n");
11/13 01:39, 1F

11/13 02:02, , 2F
真是一語驚醒夢中人啊! 不過還是有個疑問,flush()不行嗎@@
11/13 02:02, 2F

11/13 02:17, , 3F
科 我上周才問這問題XD readline恩
11/13 02:17, 3F

11/13 02:32, , 4F
flush()應該是有沖出去,可是你的readLine()讀不到'\n'
11/13 02:32, 4F

11/13 09:06, , 5F
用OutputStream也可以…
11/13 09:06, 5F

11/15 03:01, , 6F
我第一次寫socket好像碰過 之後都用樓上說的Stream系列
11/15 03:01, 6F
文章代碼(AID): #1A_3lVxW (java)