實現1對N可配置Socket伺服器程式思路

2021-04-23 23:12:06 字數 1639 閱讀 4069

實現1對n可配置socket伺服器程式思路

大致思路:框架是mfc單文件程式, 從csocket派生乙個clisten類,然後在doc類:cwebdoc中的onnewdocument函式中new乙個clisten物件,將該物件指標儲存到文件類成員m_psocket中,並把文件指標傳遞給clisten類:

m_psocket = new clisten ( this ) ;

onnewdocument接著呼叫clisten的create:

onnewdocument接著呼叫clisten的listen,開始監聽伺服器m_wwwport埠:

m_psocket->listen();

當伺服器m_wwwport埠偵聽到連線請求時,clisten類的onaccept過載函式會被呼叫。在clisten類的onaccept中呼叫我們在doc類中自建的乙個onaccept()函式。

void clisten::onaccept(int nerrorcode)

顯然,一旦某個客戶的連線請求到來,我們在doc類中自建的onaccept()函式,馬上被呼叫,**如上。doc類的onaccept()函式馬上new乙個cclient(派生自csocket),並把文件指標傳遞給cclient類:

cclient *pclient = new cclient ( this ) ;

接下來用clisten指標m_psocket來呼叫accept,並把剛剛new的cclient物件作為引數:

m_psocket->accept ( *pclient );

如無意外,乙個套接字連線就建立了。因為伺服器要1對n服務,為了維護這些連線,我們在文件類增加了乙個cptrlist成員:m_listconnects; 連線一旦建立,立即測試當前m_listconnects中的已有連線數是否已經達到最大連線限制:

當然,如果連線list還沒有滿載,馬上呼叫m_listconnects的addtail把cclient指標加進指標鍊錶成員中,以便後來伺服器與各客戶收發報文使用。

在cclient的onreceive函式中,我們接受客戶發來的資料,並分析資料,處理資料,完後傳送響應報文:

void cclient::onreceive(int nerrorcode)

在cclient的onclose函式中,我們可以記載客戶關閉套接字的事件:

void cclient::onclose(int nerrorcode)

typedef

struct

log_record, *lplog_record;

在cmainframe類開啟乙個timer以1分鐘為間隔,定期清理釋放不活躍客戶:

c***doc* pdoc = (c***doc*)getactivedocument() ;                 

pdoc->checkidleconnects() ;

在文件類的checkidleconnects函式中:

time_t tnow ;

time( &tnow ) ;

ctime cnow ( tnow ) ;

cnow -= ctimeout ;

for ( position pos = m_listconnects.getheadposition() ; pos != null ; ) }

用socket實現的檔案伺服器 1

public class forumfileclient catch exception e private socket socket private bufferedreader in private printwriter out public forumfileclient catch ex...

socket實現獲取伺服器時間

上次初步實現了一下socket的應用程式。這次在針對socket寫乙個應用程式。這次的應用是實現客戶端從主機獲取時間並且設定為自己的時間 伺服器 include include include include include include include include include defin...

swoole實現socket伺服器初探

因為專案中需要實時獲取一些 資料,以前的做法是使用ajax做定時請求,眾所周知的原因這樣效能會比較差,想用websocket來重新實現。我這裡想要實現的並不是簡單的 客戶端請求 服務端返回 這樣的邏輯,這種實現起來會很簡單,我要實現的是在伺服器端維護乙個列表,當有客戶端在這個列表中註冊的話,服務端便...