Discussion:
[問題] 想用TCP寫一個sever對多個client的程式
(时间太久无法回复)
sheepu
2007-04-22 12:17:16 UTC
Permalink
想要一個sever 對多個client

並配合TCP協定


以下是sever的建立連線方式

private ServerSocket server;
private Socket connection;

server = new ServerSocket(12345);

connection = server.accept();

sendToClient("connection successful"); //sendToClient()是自己的的函式
//主要是寄"connection successful"
//訊息給client


以下是clientA的建立連線方式:

private Socket client;
private String chatServer = "123.456.789";
client = new Socket( InetAddress.getByName( chatServer ), 12345 );



以下是clientB的建立連線方式:

private Socket client;
private String chatServer = "123.456.789";
client = new Socket( InetAddress.getByName( chatServer ), 12345 );



我是先用sever和clientA連線 順利連成功之後 (沒有關掉連線)
再用sever和clientB連線 卻無法連成功 (clientB收不到"connection successful"訊息)



是因為port無法共用的關係嗎?
要怎麼樣做才會有這種一對多的效果呢?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.22.21.137
骨頭
2007-04-22 13:30:13 UTC
Permalink
※ 引述《newpuli (sheepu)》之銘言:
: 想要一個sever 對多個client
: 並配合TCP協定
: 以下是sever的建立連線方式
: private ServerSocket server;
: private Socket connection;
: server = new ServerSocket(12345);
: connection = server.accept();

: 要怎麼樣做才會有這種一對多的效果呢?

簡單來說一次accept只會接到一個clinet,
如果你想接到多個client 就要accept多次。

但是server to client 是單thread,所以你的server 或許需要 ,

每來一個clinet就專門開一個thread去處理clinet過來的資訊,
就這樣。 \@_@/


如果你的資料處理不是同時的話,可以考慮用排隊的方式,
等A處理完再開放B進來處理,這樣就不用做multi-thread。


一切要看你的 case 需求是甚麼。

--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68
淺水中
2007-04-23 04:03:06 UTC
Permalink
※ 引述《newpuli (sheepu)》之銘言:
: 想要一個sever 對多個client
: 並配合TCP協定
: 以下是sever的建立連線方式
: private ServerSocket server;
: private Socket connection;
: server = new ServerSocket(12345);
: connection = server.accept();
: sendToClient("connection successful"); //sendToClient()是自己的的函式
: //主要是寄"connection successful"
: //訊息給client
: 以下是clientA的建立連線方式:
: private Socket client;
: private String chatServer = "123.456.789";
: client = new Socket( InetAddress.getByName( chatServer ), 12345 );
: 以下是clientB的建立連線方式:
: private Socket client;
: private String chatServer = "123.456.789";
: client = new Socket( InetAddress.getByName( chatServer ), 12345 );
: 我是先用sever和clientA連線 順利連成功之後 (沒有關掉連線)
: 再用sever和clientB連線 卻無法連成功 (clientB收不到"connection successful"訊息)
: 是因為port無法共用的關係嗎?
: 要怎麼樣做才會有這種一對多的效果呢?
聽說JDK 1.4才有的NIO效率很不錯
而且不用寫multi thread
你可以去survey一下

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.105.36
(阿信)
2007-04-23 15:04:35 UTC
Permalink
※ 引述《calais007 (淺水中)》之銘言:
: ※ 引述《newpuli (sheepu)》之銘言:
: : 想要一個sever 對多個client
: : 並配合TCP協定
: : 以下是sever的建立連線方式
: : private ServerSocket server;
: : private Socket connection;
: : server = new ServerSocket(12345);
: : connection = server.accept();
: : sendToClient("connection successful"); //sendToClient()是自己的的函式
: : //主要是寄"connection successful"
: : //訊息給client
: : 以下是clientA的建立連線方式:
: : private Socket client;
: : private String chatServer = "123.456.789";
: : client = new Socket( InetAddress.getByName( chatServer ), 12345 );
: : 以下是clientB的建立連線方式:
: : private Socket client;
: : private String chatServer = "123.456.789";
: : client = new Socket( InetAddress.getByName( chatServer ), 12345 );
: : 我是先用sever和clientA連線 順利連成功之後 (沒有關掉連線)
: : 再用sever和clientB連線 卻無法連成功 (clientB收不到"connection successful"訊息)
: : 是因為port無法共用的關係嗎?
: : 要怎麼樣做才會有這種一對多的效果呢?
: 聽說JDK 1.4才有的NIO效率很不錯
: 而且不用寫multi thread
: 你可以去survey一下

NIO 固然可以解決multithread的context switching的問題,
但是代價卻是程式的撰寫相當的不容易

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.64.166

继续阅读narkive:
Loading...