看板 java 關於我們 聯絡資訊
大家好,我目前想做一個 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
darkk6:server 在 accept 時用 ArrayList 紀錄 Client 再用迴圈 09/02 01:38
darkk6:去跑每一個 Client 的傳訊息 09/02 01:40
Nt1:謝謝,再請教一個問題,為何只要任一client異常斷線,整個 09/02 01:44
Nt1:server就會有exp,然後就新的client連上,也無法和他溝通? 09/02 01:46
darkk6:這就要看怎麼寫了 09/02 02:27
hhashoww:要在例外處理把這筆連線手動結束,否則會一直卡在那邊 09/02 09:00
hhashoww:應該說把處理該連線的thread結束掉...有錯請指正 ^^" 09/02 09:01
tkcn:樓上不太對吧,就算thread沒結束,server還是能繼續 listen 09/02 09:04
tkcn:我猜原po問題應該是沒在 thread 裡做正確的例外處理。 09/02 09:05
TonyQ:notify 的問題可以去看觀察者模式... 09/02 09:20
hhashoww:回tk大,我的意思是斷線的thread,不是listen的那個 @@ 09/02 11:51
hhashoww:如果沒結束的話,似乎會卡在那邊,新進的client沒辦法排 09/02 11:53
hhashoww:在後面接收server的訊息...是我觀念錯了嗎 >"<? 09/02 11:56
tkcn:我沒有誤會呀,舊的thread沒結束並不會影響listen新的 09/02 11:56
hhashoww:恩恩 謝謝tk大 09/02 12:58