作者Nt1 (用功点吧!)
看板java
标题Re: [J2SE] ServerSockt处理多人连线的问题
时间Thu Sep 2 12:29:46 2010
谢谢大家,我会再读一下 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)
1F:→ Nt1:补充,同样的code,若client只有一个,就不会有这样的问题 09/02 12:42
2F:推 Jichang:问题出在会 blocking .. 要再多弄一点 thread 出来 .. 09/03 19:18
3F:→ dream1124:程式码下面command:hello1 也是server的println内容吗? 09/03 20:44