已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC+课程设计报告书姓名:123学号:123专业:网络工程 前言当今社会,随着科学技术的飞跃发展,计算机已经进入了千家万户,互联网上的各种聊天工具也层出不穷。比如大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。当我们沉浸在这些聊天工具花花绿绿的界面和与好友畅聊的时候,殊不知,界面之下程序开发的难度。本程序是我和456同学合作编成,构思期间花费了很多心血,自认为考虑还算周到,可是到了编成过程中就遇到了很多困难,例如:服务器无法登录,数据库加载失败,聊天信息无法发送等现象。经过老师指点才知道一些细节没有考虑到,经过修改多次终于成功。在程序中运用到的知识有文件操作,注册表,动态链接库,多线程编程,数据库的应用技术,网络套接字的编程。 编者 2013年7月7日目录一、题目及需求 4二、需求分析 42.1 设计目的 . 42.2 设计要求 . 42.3 程序功能 4三、实验流程图 5四、程序代码 7五、总结 13六、参考文献 13一、题目及需求客户端能够登录服务器,通过服务器向客户发消息,可显示好友信息,选择向好友发送消息。服务器设有数据库,纪录客户的账号密码IP地址端口号等信息。二、需求分析2.1 设计目的使用vc+ 6.0平台实现网络应用编程,通过实践复习巩固课堂所学的知识。2.2 设计要求采用客户/服务器模式,分为客户端程序和服务器程序。客户端需登录服务器,并能够注册账号,写入服务器数据库。服务器支持多个用户同时在线聊天,在客户之间充当客户信息中心和转发中心2.3 程序功能 2.3.1 聊天服务器主要功能要在待定端口等待聊天客户连接请求,如果是注册则要更新数据库;是登录则检测是否有此用户存在,不存在返回给此客户端错误。2.3.2 服务器接收来自客户端的信息,检测对应ip和与服务器建立连接的socketIp相同的,通过此向目的客户端发送信息。2.3.3 如果客户端有上线或者下线,那么就更新用户信息数据库文件,并向所有在线用户发送新在线用户表。三、实验流程图连接服务器是否连接成功否,打印连接错误。注册还是登陆注册登陆是否返回错误是发送消息end开始 图3-1 客户端流程图开始监听建立连接接受数据 是注册、登陆还是发送数据是否有此用户注册。无登陆或者下线登陆查有此用户是返回登陆成功发送消息查询目的ip转发否更新数据库(不转发)更新数据库,向在线用户转发数据库新信息End 图 3-2 服务器端流程图 四、 程序代码以下是程序的代码部分:客户端:发送:void CChatDlg:OnSend() / TODO: Add your control notification handler code hereint ilen;int isent; UpdateData(true); if(m_msg!=) ilen=m_msg.GetLength(); isent=m_socket.Send(LPCTSTR(m_msg),ilen);/发送数据 if(isent=SOCKET_ERROR) /发送失败 MessageBox(链接失败,请重试!); else m_recmsg+=客户机:+m_msg; m_recmsg+=rn; UpdateData(false); 屏幕刷新:void CChatDlg:RefreshScreen() UpdateData(0);连接:void CChatDlg:OnConnect() / TODO: Add your control notification handler code hereif(!AfxSocketInit() /初始化 AfxMessageBox(IDC_SOCKETS_INIT_FALLED); return;GetDlgItemText(IDC_IPADDRESS1,m_ipstr);m_socket.m_hSocket=INVALID_SOCKET; UpdateData(true);bool flag=m_socket.Create(); /创建套接字if(!flag) AfxMessageBox(SOCKETS ERROR); return; m_socket.Connect(m_ipstr,m_port); /进行连接接收消息:void Mysocket:OnReceive(int nErrorCode) / TODO: Add your specialized code here and/or call the base class/获取对话框指针CChatApp*pApp=(CChatApp*)AfxGetApp();CChatDlg*pDlg=(CChatDlg*)pApp-m_pMainWnd;/往编辑框中插入消息char *pbuf=new char4096;int ibufsize=4096;int ircvd;CString strrecvd;/接收数据 ircvd=Receive(pbuf,ibufsize);if(ircvd=SOCKET_ERROR) pDlg-MessageBox(SOCKET_ERROR);else pbufircvd=NULL; pDlg-m_recmsg+=服务器:; pDlg-m_recmsg+=pbuf; pDlg-m_recmsg+=rn; pDlg-RefreshScreen();delete pbuf;CAsyncSocket:OnReceive(nErrorCode);发送消息:void Mysocket:OnSend(int nErrorCode) / TODO: Add your specialized code here and/or call the base classCAsyncSocket:OnSend(nErrorCode);连接:void Mysocket:OnConnect(int nErrorCode) / TODO: Add your specialized code here and/or call the base class获取对话框指针CChatApp*pApp=(CChatApp*)AfxGetApp(); /得到主框架句柄 应用对象CChatDlg*pDlg=(CChatDlg*)pApp-m_pMainWnd; /得到句柄 int iResult=nErrorCode;CString buffer;int namelen;if(iResult!=0) /连接失败 AfxMessageBox(链接服务器失败。); /buffer.Format(链接服务器失败。rn); pDlg-m_recmsg+=buffer; /消息else namelen=sizeof(sockaddr_in); buffer.Format (成功链接服务器%s:%d.rn,pDlg-m_ipstr,pDlg-m_port); pDlg-m_recmsg+=buffer; pDlg-GetDlgItem(IDC_SEND)-EnableWindow(true);pDlg-RefreshScreen(); /刷新窗口CAsyncSocket:OnConnect(nErrorCode);服务器端:侦听:void CServerDlg:OnListen() / TODO: Add your control notification handler code hereif(!AfxSocketInit() AfxMessageBox(IDP_SOCKETS_INIT_FAILED); return;UINT m_port = 8888;bool flag=m_serversocket.Create(m_port); /创建套接字if(!flag) AfxMessageBox(SOCKET ERROR); return;flag=m_serversocket.Listen(1); /进行侦听if(!flag) AfxMessageBox(SOCKET ERROR); return;SetDlgItemText(IDC_LISTEN,正在监听); /按钮上显示文字接收消息:void MyServerSocket:OnAccept(int nErrorCode) MySocket *psocket = new MySocket();if(Accept(*psocket)psocket-AsyncSelect(FD_READ);m_socketi+ %10 = psocket;record_socketi+%10 = psocket-m_hSocket;psocket-GetPeerName(ip_addressi+%10, ip_porti+%10);elsedelete psocket;CAsyncSocket:OnAccept(nErrorCode);接收:void MySocket:OnReceive(int nErrorCode) int receive_ret;Client_into m_database;CString name_cstring;CString password_cstring ;char if_register2;receive_ret = Receive(if_register, 2);if( receive_ret = SOCKET_ERROR)AfxMessageBox(Reiceive error);exit(-1);if(if_register0 = 0)char name_buf20;receive_ret = Receive(name_buf, 20);if( receive_ret = SOCKET_ERROR)AfxMessageBox(Reiceive error);exit(-1);char password_buf20;receive_ret = Receive(name_buf, 20);if( receive_ret = SOCKET_ERROR)AfxMessageBox(Reiceive error);exit(-1);name_cstring = name_buf;password_cstring = password_buf;if(m_database.IsOpen()m_database.Close();m_database.m_strFilter.Format(昵称 = %s, name_cstring);if(m_database.Open(CRecordset:snapshot, NULL, CRecordset:none = 0)char send_value2 = 0;send(record_socketi - 1, send_value, 2, 0);exit(-1);elseif(m_database.Open()m_database.Close();m_database.m_strFilter.Format(密码 = %s , password_cstring);if(m_database.Open(CRecordset:snapshot, NULL, CRecordset:none)char send_value2 = 0;send(record_socketi - 1, send_value, 2, 0);exit(-1);elsem_database.m_column1 = name_cstring;m_database.m_column2 = password_cstring;m_database.m_column3 = (long) ip_port i - 1;m_database.m_IP_ = ip_addressi - 1;/if(! getpeername(CAsyncSocket:OnReceive(nErrorCode);五、 总结实验中,客户端本来利用的底层套接字进行的连接服务器的工作,不过此套接字和MFC封装的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48336.101-2026星闪无线通信系统第101部分:架构和通用要求
- T/ZGZS 0505-2023再生棉纱线产品碳足迹核算方法
- T/HSIPA 025-2022中医拨筋技术操作规范
- T/CISIA 008-2024电子级过硫酸盐
- T/CARD 007-2020智力障碍者用可穿戴定位设备技术要求和测试方法
- T/CSCB 0027-2024人胰岛
- 2025~2026学年内蒙古呼伦贝尔市鄂伦春自治旗人教版六年级下册期末考试数学试卷【附答案】
- 2025~2026学年广东省揭阳市普宁市人教版六年级上册学习评价(二)数学试卷【附答案】
- 2025-2026学年河南省林州市初中政治八年级期末下册自测模拟高分特训题(附答案)
- 2025-2026学年江西省樟树市初中政治八年级期末下册高分预测黑金试卷附答案
- 《沙漠砂混凝土应用技术规程》
- 船舶防火安全设施验收规范
- 2025年人工智能训练师职业技能认证模拟试卷及答案(金融数据标注规范)
- 黄石住房公积金管理办法
- 孔探培训课件
- DB4405∕T 315-2025 非物质文化遗产 潮阳英歌
- CJ/T 120-2016给水涂塑复合钢管
- T/CECS 10214-2022钢面镁质复合风管
- 秸秆粉碎合同协议书
- 中级个人理财-2025中级银行从业资格考试《个人理财》预测试卷6
- 建筑安装工程设备与材料的划分
评论
0/150
提交评论