




版權(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ū)走廊返潮處理方案
- 借條代簽方案
- 酒店廚房清掃方案
- 租房氛圍布置方案
- 護(hù)欄平面位置改造方案
- 機(jī)械租賃方案
- 物流公司避坑方案
- 會(huì)員業(yè)務(wù)廣告投放方案
- 種植基地人員管理辦法
- 科技企業(yè)股權(quán)管理辦法
- GB/T 6075.3-2011機(jī)械振動(dòng)在非旋轉(zhuǎn)部件上測(cè)量評(píng)價(jià)機(jī)器的振動(dòng)第3部分:額定功率大于15 kW額定轉(zhuǎn)速在120 r/min至15 000 r/min之間的在現(xiàn)場(chǎng)測(cè)量的工業(yè)機(jī)器
- GB/T 5594.4-2015電子元器件結(jié)構(gòu)陶瓷材料性能測(cè)試方法第4部分:介電常數(shù)和介質(zhì)損耗角正切值測(cè)試方法
- GB/T 15558.1-2015燃?xì)庥寐竦鼐垡蚁?PE)管道系統(tǒng)第1部分:管材
- GB/T 11060.8-2020天然氣含硫化合物的測(cè)定第8部分:用紫外熒光光度法測(cè)定總硫含量
- 國(guó)開(kāi)專(zhuān)科《外國(guó)文學(xué)》十年期末考試題庫(kù)及答案
- 浙江義務(wù)教育學(xué)校校園飲水質(zhì)量提升工程建設(shè)和維護(hù)浙江教育廳
- 林州重機(jī)710采煤機(jī)電控箱裝配流程
- 個(gè)人求職簡(jiǎn)歷兩頁(yè) (46)應(yīng)聘履歷參考模板可編輯修改
- JJF 1847-2020 電子天平校準(zhǔn)規(guī)范(高清版)
- 統(tǒng)編版小學(xué)語(yǔ)二升三銜接閱讀專(zhuān)項(xiàng)訓(xùn)練—課外閱讀(二)【含答案】
- 積分會(huì)員管理系統(tǒng)excel表格模板
評(píng)論
0/150
提交評(píng)論