許多時候我們實現網路程式設計使用的是winsock api函式,雖然這些函式使用起來也很方便,很靈活,但是vc++的mfc類庫中提供了casyncsocket這樣乙個套接字類,用它來實現socket程式設計會更方便。
server端的程式設計與client端的類似,下面主要介紹他的listen及accept函式
1. 建立乙個cnewsocket類,過載casyncsocket類的onreceive、onsend函式,
如何進行資訊的顯示和傳送可以參考client程式。本例中採用將收到資訊原封不動
發回的方法來實現echo功能,**如下
cnewsocket::onreceive(intnerrorcode)cnewsocket::onsend(int nerrorcode)
2. 建立乙個cmyserversocket類,過載casyncsocket類的onaccept函式**如下
void cmyserversocket::onaccept(intnerrorcode)
else
delete psocket;}
在myserversocket.h中宣告變數public::cnewsocket* m_psocket;
3. 對話方塊新增乙個偵聽按鈕,新增如下**
void ccsockserverdlg::onlisten() }//「偵聽」成功,等待連線請求if (!m_srvrsocket。listen(1)) }}
在csockserverdlg.ccp中宣告變數public: cmyserversocket m_srvrsocket;
4. 目前程式只能實現echo功能,將資訊原封不動的**,若能將accept中由
cnewsocket* psocket = new cnewsocket();
得到的socket指標存入乙個clist或乙個陣列中,便像client端那樣,對所有的連線進行讀寫控制。
1. 建立專案csockclient
2. 設計對話方塊
去掉ok和cancle兩個按鈕,增加id_connect(連線)、id_send(傳送)、id_exit(關閉)按鈕,新增listbox控制項idc_listmsg和edit控制項idc_editmsg,並按下表為為控制項新增變數。
變數idc_editmsg
cedit
m_msgidc_listmsg
clistbox
m_msgs
3. casyncsocket類用docallback函式處理mfc訊息,當乙個網路事件發生時,docallback函式按網路事件型別fd_read、fd_write、fd_accept、fd_connect分別呼叫onreceive、onsend、onaccept、onconnect函式。由於mfc把這些函式定義為虛函式,所以要生成乙個新的c++類,以過載這些函式。做法如下:
以public方式繼承casyncsocket類,生成新類mysock類,為mysock類新增虛函式onreceive、onconnect、onsend
4. 在mysock.h中新增以下**:
1public:2
//是否連線
3bool m_bconnected;4//
訊息長度
5uint m_nlength;6//
訊息緩衝區
7char m_szbuffer[512];
5. 在mysock.cpp中過載各種函式
onreceive、onconnect、onsend
6. 雙擊idd_csockclient_dialog對話方塊中的連線按鈕,新增以下**
1ccsockclientdlg::onconnect() }
7. 新增windows訊息wm_timer響應函式
ontimer voidccsockclientdlg::ontimer(uint nidevent) }
m_clientsocket.connect(m_szserveradr,m_szport);
trycount++;
if (trycount >=10 ||m_clientsocket.m_bconnected)
cdialog::ontimer(nidevent);}
8. 雙擊idd_csockclient_dialog對話方塊中的傳送按鈕,新增以下**
voidccsockclientdlg::onsend() }
9. 雙擊idd_csockclient_dialog對話方塊中的關閉按鈕,新增以下**
ccsockclientdlg::onexit()
casyncsocket類為我們使用socket提供了極大方便。建立socket的wsastartup過程和bind過程被簡化成為create過程,
ip位址型別轉換、主機名和ip位址轉換的過程中許多複雜的變數型別都被簡化成字串和整數操作,特別是casyncsocket
類的非同步特點,完全可以替代繁瑣的執行緒操作。mfc提供了大量的類庫,我們若能靈活的使用他們,便會大大提高程式設計的效
此文為**,自己還沒有實際的實驗過,所以還沒有什麼疑問,
利用CAsyncSocket類實現Socket程式設計
隨著計算機網路化的深入,計算機網路程式設計在程式設計的過程中變得日益重要。許多文章都曾經介紹過用vc 進行socket程式設計的方法。但由於都是直接利用動態連線庫wsock32.dll進行操作,實現比較繁瑣。其實,vc 的mfc類庫中提供了casyncsocket這樣乙個套接字類,用它來實現sock...
當CAsyncSocket遇到多執行緒
用多執行緒方法設計socket程式時,你會發現在跨執行緒使用casyncsocket及其派生類時,會出現程式崩潰。所謂跨執行緒,是指該物件在乙個執行緒中呼叫create attachhandle attach函式,然後在另外乙個執行緒中呼叫其他成員函式。下面的例子就是乙個典型的導致崩潰的過程 cas...
matlab 程式設計 m檔案
功能 命令列簡單疊加,matlab按照順序執行,解決使用者在命令視窗執行許多命令,避免使用者做許多重複性工作。注意 變數為全域性變數 功能 實現計算中引數傳遞和函式呼叫。注意 1 變數為區域性變數 2 檔名 與 函式名 一一對應。3 函式的輸入引數與輸出引數 a 函式有返回引數和輸入引數。例如 傳給...