Re: [J2SE] ServerSockt處理多人連線的問題

看板java作者 (用功點吧!)時間15年前 (2010/09/02 12:29), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串2/3 (看更多)
謝謝大家,我會再讀一下 Socket 和 Thread 的一些API XD 不過目前碰到另一個問題,就是當我想讓 server 發訊息給所有連上線的 client 於是我這樣做: while(true){ String returnCode = "[Server says] : "+br.readLine(); for(Socket client: ServerHandle.SOCKET_LIST){ BufferedOutputStream os = new BufferedOutputStream(client.getOutputStream()); OutputStreamWriter osw = new OutputStreamWriter(os, "US-ASCII"); osw.write(returnCode+"\r\n"); System.out.println("Sending msg to :"+client.getInetAddress().getHostName()); osw.flush(); } } 的確可以成功發訊息給所有的client,但碰到一個怪現象,就是並非每次都會發出去, 但該訊息也不會lost,而是等到下一次的msg出現時再一起送出去,output如下: ========共有兩個client=================== command : test Sending msg to :127.0.0.1 Sending msg to :127.0.0.1 command : hello1 command : hello2 Sending msg to :127.0.0.1 Sending msg to :127.0.0.1 Sending msg to :127.0.0.1 Sending msg to :127.0.0.1 請問是什麼地方出問題呢? 感覺並不是卡在flush(),因為連 flush() 前的程式都沒執行到 ※ 引述《Nt1 (用功點吧!)》之銘言: : 大家好,我目前想做一個 socket 的小程式,需求如下: : ServerSocket: : 1.能同時接受多個clinet連線 : 2.能同時接受每個clinet發的訊息 : 3.能同時發訊息給所有的client : Socket : : 1. 能連上server : 2. 能發送/接收 訊息給server。 : 就這樣。 : 目前我已經做到的功能如下: : ServerSocket: : 1. ok,可以接受多個client連上來 (用multi-thread) : 2. ok,各個client發的訊息都可正常顯示出來 : 3. fail,server side的訊息只會發給某"一"個client,而且該client是隨機的..= ="" : Socket : : 1. ok : 2. ok : 我的問題就是要怎麼讓server的訊息可以發給所有連上的client呢? : 我的做法是: : 先開multi-thread做 server.accept(),達成多個client同時連線的功能 : 然後每個 socket thread 再開兩個 thread, 分別處理 InputStream和 OutputStream : 結果就是 server side 寫訊息到 socket 的 outputstream後,只有"一"個 client : 會收到.. : 請問是哪邊出問題了呢?感謝。 -- http://www.flickr.com/photos/mong0520/collections/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.41.2 ※ 編輯: Nt1 來自: 220.135.41.2 (09/02 12:31) ※ 編輯: Nt1 來自: 220.135.41.2 (09/02 12:31)

09/02 12:42, , 1F
補充,同樣的code,若client只有一個,就不會有這樣的問題
09/02 12:42, 1F

09/03 19:18, , 2F
問題出在會 blocking .. 要再多弄一點 thread 出來 ..
09/03 19:18, 2F

09/03 20:44, , 3F
程式碼下面command:hello1 也是server的println內容嗎?
09/03 20:44, 3F
文章代碼(AID): #1CVoWzQJ (java)
文章代碼(AID): #1CVoWzQJ (java)