Re: [J2SE] ServerSockt處理多人連線的問題
謝謝大家,我會再讀一下 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)
→
09/02 12:42, , 1F
09/02 12:42, 1F
推
09/03 19:18, , 2F
09/03 19:18, 2F
→
09/03 20:44, , 3F
09/03 20:44, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):