免費預覽已結(jié)束,剩余1頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
vc+網(wǎng)絡(luò)點對點聊天程序設(shè)計(1) 主要設(shè)計步驟:設(shè)計一個客戶機端和服務器端,兩者可以相互通信!客戶機端:1) 創(chuàng)建客戶機套接字(CREATE)2) 與遠程服務器進行連接(CONNECT)3) 開始數(shù)據(jù)傳輸(SEND,RECEIVE)4) 關(guān)閉套接字(CLOSESOCKET)。服務器端:1) 創(chuàng)建服務器套接字(CREATE)。2) 服務器套接字進行信息綁定(BIND),并開始監(jiān)聽連接(LISTEN)。3) 接受來自客戶端的連接請求(ACCEPT),并創(chuàng)建接受進程。4) 開始數(shù)據(jù)傳送(SEND,RECEIVE)。5) 關(guān)閉套接字(CLOSESOCKET)。具體操作:1:選擇應用程序,打開VC+軟件,然后想到會提示一些信息,此時,選擇“MFCAPPWIARD(EXE)向?qū)А贝藭r選擇基本對話框,然后單擊下一步,在第二步應用向?qū)е羞x擇”WINDOWS SOCKETS”支持,然后單擊下一步,按系統(tǒng)默認的點擊下一步,知道完成為之.2:刪除基本對話框出來的系統(tǒng)默認的控件類型,然后加入一個靜態(tài)文本框,一個編輯框,一個連接按鈕,一個發(fā)送按鈕和 一個接受按鈕。3.在文件StdAfx.h中的#endif前面一行加入兩行代碼包含Winsock相關(guān)頭文件及連接相應的庫文件.#include#pragma commment(lib,Winsock32)4.在對話框類的OnInitDialog()函數(shù)中初始化winsock,3設(shè)置各個按鈕的屬性值和對象的成員變量。如下面的變量類型所示。4.為各個成員變量些寫入代碼??丶愋涂丶蘒D編輯框 edit1 IDC_EDIT_RECEIVE編輯框 edit2 IDC_EDIT_SEND按鈕1 button1IDC_BUTTON1_CONNECT按鈕2 button2IDC_BUTTON2_SEND按鈕3 button3IDC_BUTTON3_RECEIVE按鈕4 button4IDC_BUTTON1_DISCONNECT 程序主對話框控件對象對應的成員變量控件IDControl IDs變量名稱Member Variable Name變量類型Category變量類型Variable TypeIDC_EDIT_RECEIVEm_stareceiveValueCstringIDC_EDIT_SENDm_stasendValueCstringIDC_BUTTON1m_connectControlCButtonIDC_BUTTON2m_sendControlCButtonIDC_BUTTON3m_receiveControlCButtonIDC_BUTTON4m_disconnectControlCButton 編寫代碼:(1)建立連接服務器的代碼:1)在對話框類的OnInitDialog()函數(shù)中初始化Winsock,將下面代碼家獨到CDialog:OnInitDialog();下面。CDialog:OnInitDialog();WSATA wsaData;WORD version=MAKEWORD(2,0);int ret=WSAStartup(version,&wsaData);if(ret!=0)TRACE(iitialize error.!);2)連接服務器,編輯連接按鈕的相應函數(shù),代碼如下:Void C12Dlg:Onconnect() WSADATA wsaData; DWORD dwIPAddr; SOCKADDR_IN sockAddr; 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;/連接服務器的端口號sockAddr.sin_port=htons(5500);/服務器地址為本機sockAddr.sin_addr.S_un.S_addr=inet_addr(“127.0.0.1”);int nConnect=connect(m_hSocket,(LPSOCKADDR)&sockAddr,sizeof(sockAddr);if(nConnect) AfxMessageBox(“連接服務器出錯!”); /禁用“發(fā)送數(shù)據(jù)”GetDlgItem(IDC_CONNECT)-Enable Window(FALSE);Return;/啟用“發(fā)送按鈕”GetDlgItem(IDC_CONNECT)-EnableWindow(TRUE);3)編輯發(fā)送按鈕的時間相應函數(shù),具體代碼如下 Void C12ClientDlg:OnSend()If(m_hSock=INVALID_SOCKET) AfxMessageBox(“當前連接不可用,請先連接到服務器!”); 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ā)送過程中出錯!”,NULL,MB_OK);/清空編輯框strContent.Empty();GetDlgItem(IDC_CONTENT)-SetWindow Text(strContent);此時send所發(fā)送的內(nèi)容是編輯框所顯示的內(nèi)容5) 為接收按鈕的事件響應函數(shù)代碼如下: Void C12ClientDlg:OnReceive()If(m_hSock=INVALID_SOCKET) AfxMessageBox(“當前連接不可用,請先連接到服務器!”); 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ā)送過程中出錯!”,NULL,MB_OK);/清空編輯框strContent.Empty();GetDlgItem(IDC_CONTENT)-SetWindow Text(strContent);此時接收編輯框顯示的內(nèi)容為客戶端發(fā)送過來的內(nèi)容6) 為斷開連接按的事件響應函數(shù),代碼如下 Void C12Dlg:OnDisconnect() If(m_hSocket!=INVALID_SOCKET) /關(guān)閉套接字 Closesocket(m_hSocket) ; WSACleanup();(2) 使用應用程序向?qū)梢粋€基本對話框12Server,在第二步中向?qū)нx擇“Windows Sockets”支持,使用對話框編輯框設(shè)計編輯框的內(nèi)容控件類型控件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 程序主對話框控件對象對應的成員變量控件IDControl IDs變量名稱Member Variable Name變量類型Category變量類型Variable TypeIDC_EDIT_RECEIVEm_stareceiveValueCstringIDC_EDIT_SENDm_stasendValueCstringIDC_BUTTON1m_connectControlCButtonIDC_BUTTON2m_sendControlCButtonIDC_BUTTON3m_receiveControlCButtonIDC_BUTTON4m_disconnectControlCButton1) 為服務器端接收按鈕的事件響應函數(shù),代碼如下:Void C12ServeDlg:Onconnect() WSADATA wsaData; int iErrorCode; If(WSAStartup(MAKEWORD(2,0),&wsaData) MessageB(“不能加載 Windows Sockets”,AfxGerAppName(),MB_OKIMB_ICONSTOP); WSACleanup(); Return;m_hServerSocket=socket(PF_INET,SOCK_STREAM,0);if(m_hSocket=INVALID_SOCK);sockAddr.sin_family=AF_INET; AfxMessageBox(“創(chuàng)建套接字出錯!”);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,(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(“無法添加消息響應”); Return;/開始監(jiān)聽If(listen(m_hServerSocket,5)=SOCKET_ERROR) AfxMessageBox(“無法監(jiān)聽!”); Return;2)WM_SEREVER_ACCEPT事件的響應函數(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;(i10)&(m_a12socketi!=INVALID_SOCKET);i+);If(i=10) Return OL;/返回一個新的SOCKETm_a12socketi=accept(m_hServersocet,(LPSOCLETADDR)&m_sock12Addr,(LPINT)&nLength);if(m_a12socketi=INVALID_SOCKET) AfxMessageBox(“accept函數(shù)無法返回一個新的SOCLET!”); Return OL;WSAAsyncSelete(m_a12Socketi,m_hwnd,WM_CLIENT_READ,FD_READ);Retuen OL;3)加入對消息的響應函數(shù)LRESULT CSEREVEDlg:OnSereveread(WPARAM wParam,LPARAM ,IParam) int iBytesRead; int iBufferLength; int iEnd; int iSpaceRemaining; char chIncomingDataBuffer1024; int I; iSpaceRemaining-=iEnd; for(i=0;(iGetDlgItem(IDC_GETINFO)-GetWindowText(tmp); Tmp+=”收到新消息”; Tmp+= chIncomingDataBuffer; Tmp+=”rn”; if(Is
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年池州職業(yè)技術(shù)學院單招綜合素質(zhì)考試參考題庫含詳細答案解析
- 2026年貴陽職業(yè)技術(shù)學院單招綜合素質(zhì)筆試參考題庫含詳細答案解析
- 2026年安徽電子信息職業(yè)技術(shù)學院單招綜合素質(zhì)考試參考題庫含詳細答案解析
- 2026年云南經(jīng)濟管理學院單招綜合素質(zhì)考試模擬試題含詳細答案解析
- 2026年鄭州旅游職業(yè)學院高職單招職業(yè)適應性測試模擬試題及答案詳細解析
- 2026年內(nèi)蒙古體育職業(yè)學院單招職業(yè)技能考試備考試題含詳細答案解析
- 2026年山西林業(yè)職業(yè)技術(shù)學院單招綜合素質(zhì)筆試模擬試題含詳細答案解析
- 2026年烏海職業(yè)技術(shù)學院單招綜合素質(zhì)考試備考試題含詳細答案解析
- 2026年河南應用技術(shù)職業(yè)學院高職單招職業(yè)適應性測試備考題庫及答案詳細解析
- 2026廣西百色市公開遴選公務員17人備考考試試題及答案解析
- DL-T 5861-2023 電化學儲能電站初步設(shè)計內(nèi)容深度規(guī)定
- 高中體育教師期末教學工作匯報
- 別克英朗說明書
- 地下管線測繪課件
- 珍稀植物移栽方案
- 新人教版數(shù)學三年級下冊預習學案(全冊)
- JJG 810-1993波長色散X射線熒光光譜儀
- GB/T 34336-2017納米孔氣凝膠復合絕熱制品
- GB/T 20077-2006一次性托盤
- GB/T 1335.3-2009服裝號型兒童
- GB/T 10046-2008銀釬料
評論
0/150
提交評論