




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、用WSAsyncSelect創(chuàng)建一個(gè)聊天室服務(wù)器端程序1.創(chuàng)建基于對(duì)話框的MFC應(yīng)用程序,巹 添加一個(gè)EDIT控件,界面效果如圖示。在xxxDlg.cpp中引入Socket動(dòng)態(tài)鏈接庫(kù),并定義Socket消息 /引y入?Socket動(dòng)態(tài)?連?接庫(kù)a #include winsock2.h#pragma comment(lib,WS2_32.lib)/定義?Socket消?息 #define WM_SOCKET (WM_USER+1)在應(yīng)用程序胡初始化部分初始化Socket。在 :OnInitDialog() 中添加初始化代碼。/初始化SocketWSADATA wsaData;WORD sock
2、etVersion=MAKEWORD(2,2);if(WSAStartup(socketVersion,&wsaData)!=0)MessageBox(LSOCKET初始化失敗!);return 0;USHORT nPort=3000;SOCKET s=socket(AF_INET,SOCK_STREAM,0);sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=ntohs(nPort);sin.sin_addr.S_un.S_addr=INADDR_ANY;if(bind(s,(sockaddr*)&sin,sizeof(sin)=SOCK
3、ET_ERROR)DWORD error=GetLastError();return TRUE;/注冊(cè)Socket關(guān)心的事件WSAAsyncSelect(s,m_hWnd,WM_SOCKET,FD_ACCEPT|FD_CLOSE);listen(s,10);編寫(xiě)Socket的消息響應(yīng)函數(shù)在xxxDlg.h文件中添加Socket消息響應(yīng)函數(shù)afx_msg LRESULT OnSocketMsg(WPARAM wParam,LPARAM lParam);在xxxDlg.cpp實(shí)現(xiàn)消息響應(yīng)函數(shù)LRESULT CASynsIODlg:OnSocketMsg(WPARAM wParam,LPARAM l
4、Param)SOCKET s=wParam;CString strContent;if(WSAGETSELECTERROR(lParam)closesocket(s);return false;switch(WSAGETSELECTEVENT(lParam)case FD_ACCEPT: /檢測(cè)到有套接字連接SOCKET client=accept(s,NULL,NULL);WSAAsyncSelect(client,m_hWnd,WM_SOCKET,FD_READ|FD_WRITE|FD_CLOSE);CString strContent;GetDlgItemText(IDC_EDIT1,s
5、trContent);if(!strContent.IsEmpty()strContent+=rn;strContent+=有客戶端連接上來(lái)了!;SetDlgItemText(IDC_EDIT1,strContent);/顯示內(nèi)容break;case FD_WRITE:break;case FD_READ:char szText1024=0;if(recv(s,szText,1024,0)=-1)closesocket(s);elseGetDlgItemText(IDC_EDIT1,strContent);if(!strContent.IsEmpty() strContent+=rn; CSt
6、ring strTemp;strTemp.Format(-T(%s),szText);strContent+=strTemp;SetDlgItemText(IDC_EDIT1,strContent);/顯示內(nèi)容break;case FD_CLOSE:closesocket(s);GetDlgItemText(IDC_EDIT1,strContent);if(!strContent.IsEmpty()strContent+=rn;strContent+=有客戶斷開(kāi)連接了!;SetDlgItemText(IDC_EDIT1,strContent);/顯示內(nèi)容break;return true;定義
7、WM_SOCKET帶OnOnSocketMsg()函數(shù)的映射關(guān)系。BEGIN_MESSAGE_MAP(CWSAsyncSelectDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDOK, &CWSAsyncSelectDlg:OnBnClickedOk)/定義WM_SOCKET消息到OnSocketMsg()函數(shù)胡映射ON_MESSAGE(WM_SOCKET,OnSocketMsg)END_MESSAGE_MAP()在窗口銷(xiāo)毀事件中釋放Socket資源??蛻舳顺绦蛑谱饕弧?chuàng)建MF
8、C應(yīng)用程序并布局控件,其界面如下:二、初始化“IP地址“及”端口號(hào)“控件的值。三、添加全局變量在XXXDlg.h文件中添加#define WM_NETWORK WM_USER+100 SOCKET sock; 四、編寫(xiě)“連接”按鈕響應(yīng)事件函數(shù)/初始化Socket WSADATA wsa; if(WSAStartup(MAKEWORD(2,2),&wsa)!=0) MessageBox(L套接字初始化失敗!); return; /創(chuàng)建Socket if(sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)=INVALID_SOCKET) MessageBox(
9、L創(chuàng)建套接字失??!); WSACleanup(); return; /獲取服務(wù)器地址及端口號(hào) CString strip; GetDlgItemText(IDC_IPADDRESS1,strip); const char *cip; cip=(const char *)strip.GetBuffer(strip.GetLength(); CString strPort; GetDlgItemText(IDC_EDIT2,strPort); int port=_ttoi(strPort);/ msg.Format(%c,&cip);MessageBox(msg+ +strPort);/綁定地址
10、struct sockaddr_in serverAddr; ZeroMemory(&serverAddr,sizeof(serverAddr); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.S_un.S_addr = inet_addr(127.0.0.1); serverAddr.sin_port = htons(3000); /注冊(cè)SOcket關(guān)注的事件/請(qǐng)求諒鏈接 if(connect(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr)=SOCKET_ERROR)
11、int err = WSAGetLastError(); if(err=WSAEWOULDBLOCK) msg.Format(_T(Waiting./n); else MessageBox(_T(無(wú)法連接到服務(wù)器!); closesocket(sock); WSACleanup(); 五、編寫(xiě)“發(fā)送”按鈕響應(yīng)事件函數(shù) / TODO: 在此添加控件通知處理程序代碼/讀取庶發(fā)送的數(shù)據(jù)CString m_message;GetDlgItemText(IDC_EDIT3,m_message);/發(fā)送數(shù)據(jù) int bytes = send(sock,(const char *)m_message.GetBuffer(m_message.GetLength(),m_message.GetLength()*2,0); if(bytes=SOCKET_ERROR) int error = WSAGetLastError(); if(error=WSAEWOULDBLOCK) msg = Send failed for message: ; msg+=m_message; else msg.Format(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省眉山市仁壽一中南校區(qū)2023-2024學(xué)年高三11月期中理綜生物 無(wú)答案
- 天津市十二區(qū)重點(diǎn)學(xué)校2023屆高三下學(xué)期畢業(yè)班聯(lián)考(一)數(shù)學(xué)試題 無(wú)答案
- 小微企業(yè)創(chuàng)業(yè)知識(shí)課件
- 護(hù)士在用藥過(guò)程中的風(fēng)險(xiǎn)管理試題及答案
- 家政養(yǎng)老護(hù)理課件
- 頤和園的美景與文化課件講解課
- 安保防恐知識(shí)培訓(xùn)課件
- 電力系統(tǒng)培訓(xùn)課件
- 2025年護(hù)士考試健康促進(jìn)理念試題與答案
- 工程經(jīng)濟(jì)學(xué)課程設(shè)計(jì)
- xx學(xué)校研學(xué)旅行活動(dòng)告家長(zhǎng)書(shū)
- 醫(yī)院檢驗(yàn)科實(shí)驗(yàn)室生物安全管理委員會(huì)及工作職責(zé)
- 艾里遜自動(dòng)變速箱針腳圖PPT通用課件
- 圣地非遺-魯錦紋樣特征
- 自動(dòng)扶梯標(biāo)準(zhǔn)安裝施工方案
- 化探取樣規(guī)范
- 起重機(jī)械交叉作業(yè)安全措施
- MBR運(yùn)行管理手冊(cè)(共21頁(yè))
- 生態(tài)動(dòng)力素講解話術(shù)
- 五年級(jí)家長(zhǎng)會(huì)英語(yǔ)老師發(fā)言課件.ppt
- Oracle-BI安裝及使用指南(linux)(精編版)
評(píng)論
0/150
提交評(píng)論