版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、vc+網(wǎng)絡(luò)點(diǎn)對(duì)點(diǎn)聊天程序設(shè)計(jì)(1) 主要設(shè)計(jì)步驟:設(shè)計(jì)一個(gè)客戶機(jī)端和服務(wù)器端,兩者可以相互通信!客戶機(jī)端:1) 創(chuàng)建客戶機(jī)套接字(create)2) 與遠(yuǎn)程服務(wù)器進(jìn)行連接(connect)3) 開始數(shù)據(jù)傳輸(send,receive)4) 關(guān)閉套接字(closesocket)。服務(wù)器端:1) 創(chuàng)建服務(wù)器套接字(create)。2) 服務(wù)器套接字進(jìn)行信息綁定(bind),并開始監(jiān)聽連接(listen)。3) 接受來自客戶端的連接請(qǐng)求(accept),并創(chuàng)建接受進(jìn)程。4) 開始數(shù)據(jù)傳送(send,receive)。5) 關(guān)閉套接字(closesocket)。具體操作:1:選擇應(yīng)用程序,打開vc+軟
2、件,然后想到會(huì)提示一些信息,此時(shí),選擇“mfcappwiard(exe)向?qū)А贝藭r(shí)選擇基本對(duì)話框,然后單擊下一步,在第二步應(yīng)用向?qū)е羞x擇”windows sockets”支持,然后單擊下一步,按系統(tǒng)默認(rèn)的點(diǎn)擊下一步,知道完成為之.2:刪除基本對(duì)話框出來的系統(tǒng)默認(rèn)的控件類型,然后加入一個(gè)靜態(tài)文本框,一個(gè)編輯框,一個(gè)連接按鈕,一個(gè)發(fā)送按鈕和 一個(gè)接受按鈕。3.在文件stdafx.h中的#endif前面一行加入兩行代碼包含winsock相關(guān)頭文件及連接相應(yīng)的庫文件.#include<winsock.h>#pragma commment(lib,"winsock32")
3、4.在對(duì)話框類的oninitdialog()函數(shù)中初始化winsock,3設(shè)置各個(gè)按鈕的屬性值和對(duì)象的成員變量。如下面的變量類型所示。4.為各個(gè)成員變量些寫入代碼。控件類型控件id編輯框 edit1 idc_edit_receive編輯框 edit2 idc_edit_send按鈕1 button1idc_button1_connect按鈕2 button2idc_button2_send按鈕3 button3idc_button3_receive按鈕4 button4idc_button1_disconnect 程序主對(duì)話框控件對(duì)象對(duì)應(yīng)的成員變量控件idcontrol ids變量名稱memb
4、er variable name變量類型category變量類型variable typeidc_edit_receivem_stareceivevaluecstringidc_edit_sendm_stasendvaluecstringidc_button1m_connectcontrolcbuttonidc_button2m_sendcontrolcbuttonidc_button3m_receivecontrolcbuttonidc_button4m_disconnectcontrolcbutton 編寫代碼:(1)建立連接服務(wù)器的代碼:1)在對(duì)話框類的oninitdialog()函數(shù)中
5、初始化winsock,將下面代碼家獨(dú)到cdialog:oninitdialog();下面。cdialog:oninitdialog();wsata wsadata;word version=makeword(2,0);int ret=wsastartup(version,&wsadata);if(ret!=0)trace("iitialize error.!");2)連接服務(wù)器,編輯連接按鈕的相應(yīng)函數(shù),代碼如下:void c12dlg:onconnect() wsadata wsadata; dword dwipaddr; sockaddr_in sockaddr;
6、 if(wsastartup(makeword(2,0),&wsadata) messagebox(“不能加載 windows sockets”,null,mb_ok); return;m_hsocket(pf_inet,sock_stream,0);sockaddr.sin_family=af_inet;/連接服務(wù)器的端口號(hào)sockaddr.sin_port=htons(5500);/服務(wù)器地址為本機(jī)sockaddr.sin_addr.s_un.s_addr=inet_addr(“127.0.0.1”);int nconnect=connect(m_hsocket,(lpsockad
7、dr)&sockaddr,sizeof(sockaddr);if(nconnect) afxmessagebox(“連接服務(wù)器出錯(cuò)!”); /禁用“發(fā)送數(shù)據(jù)”getdlgitem(idc_connect)->enable window(false);return;/啟用“發(fā)送按鈕”getdlgitem(idc_connect)->enablewindow(true);3)編輯發(fā)送按鈕的時(shí)間相應(yīng)函數(shù),具體代碼如下 void c12clientdlg:onsend()if(m_hsock=invalid_socket) afxmessagebox(“當(dāng)前連接不可用,請(qǐng)先連接到服
8、務(wù)器!”); return;cstring strcontent;/從編輯框中獲取將要發(fā)送的內(nèi)容getdlgitem(idc_content)->getwindow text(strcontent);if(strcontent.isempty() afxmessagebox(“不能發(fā)送空信息!”); return;strcontent+=”n”;int ncharsend(m_hsocket.strcontent,strcontent.getlength(),0);if(ncharsend=socket_error) messagebox(“發(fā)送過程中出錯(cuò)!”,null,mb_ok);/
9、清空編輯框strcontent.empty();getdlgitem(idc_content)->setwindow text(strcontent);此時(shí)send所發(fā)送的內(nèi)容是編輯框所顯示的內(nèi)容5) 為接收按鈕的事件響應(yīng)函數(shù)代碼如下: void c12clientdlg:onreceive()if(m_hsock=invalid_socket) afxmessagebox(“當(dāng)前連接不可用,請(qǐng)先連接到服務(wù)器!”); return;cstring strcontent;/從編輯框中獲取將要發(fā)送的內(nèi)容getdlgitem(idc_content)->getwindow text(st
10、rcontent);if(strcontent.isempty() afxmessagebox(“不能發(fā)送空信息!”); return;strcontent+=”n”;int ncharsend(m_hsocket.strcontent,strcontent.getlength(),0);if(ncharsend=socket_error) messagebox(“發(fā)送過程中出錯(cuò)!”,null,mb_ok);/清空編輯框strcontent.empty();getdlgitem(idc_content)->setwindow text(strcontent);此時(shí)接收編輯框顯示的內(nèi)容為客
11、戶端發(fā)送過來的內(nèi)容6) 為斷開連接按的事件響應(yīng)函數(shù),代碼如下 void c12dlg:ondisconnect() if(m_hsocket!=invalid_socket) /關(guān)閉套接字 closesocket(m_hsocket) ; wsacleanup();(2) 使用應(yīng)用程序向?qū)梢粋€(gè)基本對(duì)話框12server,在第二步中向?qū)нx擇“windows sockets”支持,使用對(duì)話框編輯框設(shè)計(jì)編輯框的內(nèi)容控件類型控件id編輯框 edit1 idc_edit_receive編輯框 edit2 idc_edit_send按鈕1 button1idc_button1_connect按鈕2 b
12、utton2idc_button2_send按鈕3 button3idc_button3_receive按鈕4 button4idc_button1_disconnect 程序主對(duì)話框控件對(duì)象對(duì)應(yīng)的成員變量控件idcontrol ids變量名稱member variable name變量類型category變量類型variable typeidc_edit_receivem_stareceivevaluecstringidc_edit_sendm_stasendvaluecstringidc_button1m_connectcontrolcbuttonidc_button2m_sendcont
13、rolcbuttonidc_button3m_receivecontrolcbuttonidc_button4m_disconnectcontrolcbutton1) 為服務(wù)器端接收按鈕的事件響應(yīng)函數(shù),代碼如下:void c12servedlg:onconnect() wsadata wsadata; int ierrorcode; if(wsastartup(makeword(2,0),&wsadata) messageb(“不能加載 windows sockets”,afxgerappname(),mb_okimb_iconstop); wsacleanup(); return;m
14、_hserversocket=socket(pf_inet,sock_stream,0);if(m_hsocket=invalid_sock);sockaddr.sin_family=af_inet; afxmessagebox(“創(chuàng)建套接字出錯(cuò)!”);return;/綁定端口m_socketserveraddr.sin_family=af_inet;m_socketserveraddr.sin_addr.s_addr=inet_addr(“127.0.0.1”);m_socketserveraddr.sin_port=htons(5500);if(bind(m_hserversocket,(
15、lpsockaddr)&m_socketaddr,sizeof(m_sockserveraddr)=socket_error) afxmessagebox(“無法綁定端口”); return;ierrorcode=wsaasyncsekect(m_hsweversocket,m_hwnd,wm_server_accept,fd_accept);if(ierrorcode=socket_error) afxmessagebox(“無法添加消息響應(yīng)”); return;/開始監(jiān)聽if(listen(m_hserversocket,5)=socket_error) afxmessagebox
16、(“無法監(jiān)聽!”); return;2)wm_serever_accept事件的響應(yīng)函數(shù)。lresult c12serevedlg:onsereveaccept(wparam wparam,lparam ,lparam) sockaddr_in m_sock12addr; int nlength=sizeof(sockaddr); int i; if(wsagetselectevent(iparam)=fd_accept) if(i=0;(i<10)&&(m_a12socketi!=invalid_socket);i+);if(i=10) return ol;/返回一個(gè)新
17、的socketm_a12socketi=accept(m_hserversocet,(lpsocletaddr)&m_sock12addr,(lpint)&nlength);if(m_a12socketi=invalid_socket) afxmessagebox(“accept函數(shù)無法返回一個(gè)新的soclet!”); return ol;wsaasyncselete(m_a12socketi,m_hwnd,wm_client_read,fd_read);retuen ol;3)加入對(duì)消息的響應(yīng)函數(shù)lresult cserevedlg:onsereveread(wparam w
18、param,lparam ,iparam) int ibytesread; int ibufferlength; int iend; int ispaceremaining; char chincomingdatabuffer1024; int i; ispaceremaining-=iend; for(i=0;(i<10);&&(m_a12socketi!=wparam);i+) ibytesread=recv(m_a12socketi,(lpstr)(chincomingdatabuffer),ispaceremaining,0); iend+=ibytesread; chincomingdatabufferiend=0; /編輯框中新增收到的消息 cstring tmp; this->getdlgitem(idc_getinfo)->getwindowtext(tmp); tmp+=”收到新消息”; tmp+= chincomingdatabuffer; tmp+
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 土石方承包合同書范文(6篇)
- 醫(yī)院核酸采集工作人員先進(jìn)事跡(5篇)
- 溯源數(shù)據(jù)區(qū)塊鏈應(yīng)用-洞察分析
- 探究元宇宙玩具發(fā)展趨勢(shì)-洞察分析
- 藝術(shù)家個(gè)人品牌構(gòu)建-洞察分析
- 研究團(tuán)隊(duì)協(xié)作模式-洞察分析
- 新型驅(qū)動(dòng)系統(tǒng)開發(fā)-洞察分析
- 維護(hù)質(zhì)量改進(jìn)策略-洞察分析
- 《住宅建筑節(jié)能設(shè)計(jì)》課件
- 反校園欺凌活動(dòng)總結(jié)范文(6篇)
- 生產(chǎn)工藝驗(yàn)證方案(藥品)
- 水庫白蟻防治標(biāo)書
- 電子電路EWB仿真技術(shù)
- 小學(xué)三年級(jí)語文教研活動(dòng)記錄表1
- 初中九年級(jí)化學(xué)課件化學(xué)實(shí)驗(yàn)過濾
- 教學(xué)課件:《新時(shí)代新征程》
- 廢氣治理設(shè)施運(yùn)行管理規(guī)程、制度
- 蛋糕店合伙開店合同
- 短視頻的拍攝與剪輯
- 七彩課堂課程表
- 第4課 (3)“探界者”鐘揚(yáng)(教師版)
評(píng)論
0/150
提交評(píng)論