作者: 梁晨寶
本工程類似于oicq的消息發(fā)送機(jī)制,不過他只能夠發(fā)送簡單的字符串。雖然簡單,但他也是一個(gè)很好的VC網(wǎng)絡(luò)學(xué)習(xí)例子。
本例通過VC帶的SOCKET類,重載了他的一個(gè)接受類mysock類,此類可以吧接收到的信息顯示在客戶區(qū)理。以下是實(shí)現(xiàn)過程:
建立一個(gè)MFC 單文檔工程,工程名為oicq,在第四步選取WINDOWS SOCKetS支持,其它取默認(rèn)設(shè)置即可。為了簡單,這里直接把a(bǔ)bout對話框作些改變,作為發(fā)送信息界面。
這里通過失去對話框來得到發(fā)送的字符串、獲得焦點(diǎn)時(shí)把字符串發(fā)送出去。創(chuàng)建oicq類的窗口,獲得VIEW類指針,進(jìn)而可以把接收到的信息顯示出來。
extern CString bb; void CAboutDlg::OnKillFocus(CWnd* pNewWnd) { // TODO: Add your message handler code here CDialog::OnKillFocus(pNewWnd); bb=m_edit; } 對于OICQVIEW類 char aa[100]; CString mm; CDC* pdc; class mysock:public CSocket //派生mysock類,此類既有接受功能 {public:void OnReceive(int nErrorCode) //可以隨時(shí)接收信息 { CSocket::Receive((void*)aa,100,0); mm=aa; CString ll=" ";//在顯示消息之前,消除前面發(fā)送的消息 pdc->TextOut(50,50,ll); pdc->TextOut(50,50,mm); } };
mysock sock1; CString bb; BOOL COicqView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { CView::OnSetFocus(pOldWnd);
// TODO: Add your message handler code here and/or call default bb="besting:"+bb; //確定發(fā)送者身份為besting sock1.SendTo(bb,100,1060,"192.168.0.255",0); //獲得焦點(diǎn)以廣播形式發(fā)送信息,端口號為1060
return CView::OnSetCursor(pWnd, nHitTest, message); }
int COicqView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; sock1.Create(1060,SOCK_DGRAM,NULL);//以數(shù)據(jù)報(bào)形式發(fā)送消息
static CClientDC wdc(this); //獲得當(dāng)前視類的指針 pdc=&wdc; // TODO: Add your specialized creation code here
return 0; }
運(yùn)行一下,打開ABOUT對話框,輸入發(fā)送信息,enter鍵就可以發(fā)送信息了,是不是有點(diǎn)像qq啊?
|