vc網(wǎng)絡(luò)點(diǎn)對(duì)點(diǎn)聊天程序設(shè)計(jì)_第1頁
vc網(wǎng)絡(luò)點(diǎn)對(duì)點(diǎn)聊天程序設(shè)計(jì)_第2頁
vc網(wǎng)絡(luò)點(diǎn)對(duì)點(diǎn)聊天程序設(shè)計(jì)_第3頁
vc網(wǎng)絡(luò)點(diǎn)對(duì)點(diǎn)聊天程序設(shè)計(jì)_第4頁
vc網(wǎng)絡(luò)點(diǎn)對(duì)點(diǎn)聊天程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論