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

看板java作者 (用功點吧!)時間13年前 (2010/09/02 01:03), 編輯推噓2(2013)
留言15則, 5人參與, 最新討論串1/3 (看更多)
大家好,我目前想做一個 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: 114.32.30.33

09/02 01:38, , 1F
server 在 accept 時用 ArrayList 紀錄 Client 再用迴圈
09/02 01:38, 1F

09/02 01:40, , 2F
去跑每一個 Client 的傳訊息
09/02 01:40, 2F

09/02 01:44, , 3F
謝謝,再請教一個問題,為何只要任一client異常斷線,整個
09/02 01:44, 3F

09/02 01:46, , 4F
server就會有exp,然後就新的client連上,也無法和他溝通?
09/02 01:46, 4F

09/02 02:27, , 5F
這就要看怎麼寫了
09/02 02:27, 5F

09/02 09:00, , 6F
要在例外處理把這筆連線手動結束,否則會一直卡在那邊
09/02 09:00, 6F

09/02 09:01, , 7F
應該說把處理該連線的thread結束掉...有錯請指正 ^^"
09/02 09:01, 7F

09/02 09:04, , 8F
樓上不太對吧,就算thread沒結束,server還是能繼續 listen
09/02 09:04, 8F

09/02 09:05, , 9F
我猜原po問題應該是沒在 thread 裡做正確的例外處理。
09/02 09:05, 9F

09/02 09:20, , 10F
notify 的問題可以去看觀察者模式...
09/02 09:20, 10F

09/02 11:51, , 11F
回tk大,我的意思是斷線的thread,不是listen的那個 @@
09/02 11:51, 11F

09/02 11:53, , 12F
如果沒結束的話,似乎會卡在那邊,新進的client沒辦法排
09/02 11:53, 12F

09/02 11:56, , 13F
在後面接收server的訊息...是我觀念錯了嗎 >"<?
09/02 11:56, 13F

09/02 11:56, , 14F
我沒有誤會呀,舊的thread沒結束並不會影響listen新的
09/02 11:56, 14F

09/02 12:58, , 15F
恩恩 謝謝tk大
09/02 12:58, 15F
文章代碼(AID): #1CVeTh21 (java)
文章代碼(AID): #1CVeTh21 (java)