




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用WSAsyncSelect创建一个聊天室服务器端程序1.创建基于对话框的MFC应用程序,巹 添加一个EDIT控件,界面效果如图示。在xxxDlg.cpp中引入Socket动态链接库,并定义Socket消息 /引y入?Socket动态?连?接库a #include winsock2.h#pragma comment(lib,WS2_32.lib)/定义?Socket消?息 #define WM_SOCKET (WM_USER+1)在应用程序胡初始化部分初始化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;/注册Socket关心的事件WSAAsyncSelect(s,m_hWnd,WM_SOCKET,FD_ACCEPT|FD_CLOSE);listen(s,10);编写Socket的消息响应函数在xxxDlg.h文件中添加Socket消息响应函数afx_msg LRESULT OnSocketMsg(WPARAM wParam,LPARAM lParam);在xxxDlg.cpp实现消息响应函数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: /检测到有套接字连接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+=有客户端连接上来了!;SetDlgItemText(IDC_EDIT1,strContent);/显示内容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);/显示内容break;case FD_CLOSE:closesocket(s);GetDlgItemText(IDC_EDIT1,strContent);if(!strContent.IsEmpty()strContent+=rn;strContent+=有客户断开连接了!;SetDlgItemText(IDC_EDIT1,strContent);/显示内容break;return true;定义
7、WM_SOCKET带OnOnSocketMsg()函数的映射关系。BEGIN_MESSAGE_MAP(CWSAsyncSelectDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDOK, &CWSAsyncSelectDlg:OnBnClickedOk)/定义WM_SOCKET消息到OnSocketMsg()函数胡映射ON_MESSAGE(WM_SOCKET,OnSocketMsg)END_MESSAGE_MAP()在窗口销毁事件中释放Socket资源。客户端程序制作一、创建MF
8、C应用程序并布局控件,其界面如下:二、初始化“IP地址“及”端口号“控件的值。三、添加全局变量在XXXDlg.h文件中添加#define WM_NETWORK WM_USER+100 SOCKET sock; 四、编写“连接”按钮响应事件函数/初始化Socket WSADATA wsa; if(WSAStartup(MAKEWORD(2,2),&wsa)!=0) MessageBox(L套接字初始化失败!); return; /创建Socket if(sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)=INVALID_SOCKET) MessageBox(
9、L创建套接字失败!); WSACleanup(); return; /获取服务器地址及端口号 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); /注册SOcket关注的事件/请求谅链接 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(无法连接到服务器!); closesocket(sock); WSACleanup(); 五、编写“发送”按钮响应事件函数 / TODO: 在此添加控件通知处理程序代码/读取庶发送的数据CString m_message;GetDlgItemText(IDC_EDIT3,m_message);/发送数据 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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离异孩子抚养协议书
- 汽车股份分配协议书
- 水费矛盾调解协议书
- 创意美术培训课件
- 开题报告-跨文化交际的语用失误
- 腹痛临床护理症状
- 矿山塌方施工方案
- 地砖缝隙施工方案
- 2025-2030年中国粉末可吸收止血器行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国礼品台历行业市场现状分析及竞争格局与投资发展研究报告
- xx学校研学旅行活动告家长书
- 医院检验科实验室生物安全管理委员会及工作职责
- 艾里逊自动变速箱针脚图PPT通用课件
- 圣地非遗-鲁锦纹样特征
- 自动扶梯标准安装施工方案
- 化探取样规范
- 起重机械交叉作业安全措施
- MBR运行管理手册(共21页)
- 生态动力素讲解话术
- 五年级家长会英语老师发言课件.ppt
- Oracle-BI安装及使用指南(linux)(精编版)
评论
0/150
提交评论