作者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