線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2531
推到 Plurk!
推到 Facebook!

使用ServerSocket1->Socket->ActiveConnections;問題

答題得分者是:aftcast
addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-07 11:28:43 IP:114.47.xxx.xxx 訂閱
各位 大大 

小弟在寫server<->client傳資料的簡易測試程式
server端用ServerSocket1->Socket->ActiveConnections來判斷有多少個client連上線
這在OnClientConnect事件發生時使用不會有問題
可是用在OnClientDisconnect事件會有問題,發現ActiveConnections好像會在OnClientDisconnect
事件發生後才減一,請問正常的順序是這樣嘛

謝謝


aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-07 15:05:19 IP:210.64.xxx.xxx 訂閱
我的測式情形如同你一樣。所以我個人建議如下做法

int i = ServerSocket1->Socket->ActiveConnections - 1;

自己減1,這樣的演算法應該是正確的。

註: 而照help檔的說明,這個事件後才會free connection,所以在free前夕當然是connection還存在。

===================引 用 addn 文 章===================
各位 大大

小弟在寫server<->client傳資料的簡易測試程式
server端用ServerSocket1->Socket->ActiveConnections來判斷有多少個client連上線
這在OnClientConnect事件發生時使用不會有問題
可是用在OnClientDisconnect事件會有問題,發現ActiveConnections好像會在OnClientDisconnect
事件發生後才減一,請問正常的順序是這樣嘛

謝謝
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2009-04-07 15:08:18, 註解 無‧
addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-07 18:33:31 IP:114.47.xxx.xxx 訂閱
感謝 aftcast 大大 解答

原來如此,再請教
小弟server程式,設定可連線的最大client數為10個
在測試時server與client是在同一台電腦上
開一個server程式,及好幾個相同的client程式
可是當client數超過10個以後,新開的client還是可以繼續
連線不會觸發連線錯誤的事件,請問為甚會這樣呢?

還是說不能用同一台電腦來測試連線的client數量呢?
謝謝
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-08 10:15:48 IP:114.137.xxx.xxx 訂閱
請問你是如何限定連線數的?
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-08 10:53:54 IP:114.47.xxx.xxx 訂閱
  您好
請參考如下
void __fastcall TForm1::FormActivate(TObject *Sender)
{
ServerSocket1->Port=4000;
ServerSocket1->ThreadCacheSize=10;
ServerSocket1->Open();
StatusBar1->SimpleText="Listening...";
Memo1->Clear();
}
ServerSocket1->ThreadCacheSize=10;
設定連線數目


aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-08 11:52:37 IP:210.64.xxx.xxx 訂閱
那個屬性只適用於stThreadBlocking的模式

若你用的是none blocking的模式則不適用,要靠自己依ActiveConnections的資料並於onaccept的情形下去disconnect過多的連線。



===================引 用 addn 文 章===================
您好
請參考如下
void __fastcall TForm1::FormActivate(TObject *Sender)
{
ServerSocket1->Port=4000;
ServerSocket1->ThreadCacheSize=10;
ServerSocket1->Open();
StatusBar1->SimpleText="Listening...";
Memo1->Clear();
}
ServerSocket1->ThreadCacheSize=10;
設定連線數目


------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-04-08 12:27:07 IP:114.47.xxx.xxx 訂閱
您好

請問
1.
可以大概說明none blocking,Blocking兩種模式差異嘛?
2.
還有要怎判斷ServerSocket1->Socket->Connections[i]
對應的是那一個client呢?
3.
可否推建關於bcb winsock入門的書呢?

謝謝
系統時間:2017-12-15 6:37:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!