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