

已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络工程-实践教程实验一报告单班 级_0906101_ 姓 名_贺嵘 _ 学 号_08_ 实验日期_ 评 分_ 教师签名_ 1实验名称基于winsock api与mfc的网络程序的编写与分析。2实验目的(1)进一步熟练掌握常用的winsock api函数。(2)掌握基于mfc的简单应用程序的编写方法,理解vc编写的windows应用程序的运行机制。(3)掌握基于winsock api函数与mfc的网络通信程序的编写方法。3实验地点 一实验楼510机房4实验环境计算机局域网、visual c+6.05实验性质实验性质:验证性。6实验学时实验课时:2学时。7实验内容(1)基于winsock api函数和udp协议的网络通信mfc程序的界面制作。(2)基于winsock api函数和udp协议的网络聊天mfc程序的代码编写。(3)聊天程序在局域网中两台不同电脑上的测试。(4)聊天程序在同一台电脑上的测试。(5)聊天程序核心代码分析说明。8实验步骤(1)基于winsock api函数和udp协议的网络通信mfc程序的界面制作。在visual c+6.0中,利用mfc appwizardexe新建一个工程,自拟工程名称,并注意设置该工程的保存位置(如图1所示),选择应用程序类型为“基本对话框”(如图2所示,并注意选中wosa支持(如图3所示),其余采用默认。 图1 图2图3在得到的工程的对话框资源上,放置两个文本控件,两个命令按钮,一个框架控件并修改各控件的属性和布局如图4所示。 图4(2)基于winsock api函数和udp协议的网络聊天mfc程序的代码编写。wychat.h的主要代码如下:class cwychatapp : public cwinapppublic:cwychatapp(); cwychatapp(); /添加的析构函数,便于winsock函数库的注销/ overrides/ classwizard generated virtual function overrides/afx_virtual(cwychatapp)public:virtual bool initinstance();/afx_virtual/ implementation/afx_msg(cwychatapp)/ note - the classwizard will add and remove member functions here./ do not edit what you see in these blocks of generated code !/afx_msgdeclare_message_map();wychat.cpp的主要代码如下:cwychatapp:cwychatapp() /析构函数 wsacleanup(); /注销winsock函数库/ the one and only cwychatapp objectcwychatapp theapp;/ cwychatapp initializationbool cwychatapp:initinstance() /在初始化函数中注册winsock函数库/if (!afxsocketinit()/afxmessagebox(idp_sockets_init_failed);/return false;/ word wversionrequested;wsadata wsadata;int err;wversionrequested = makeword( 2, 2 );err = wsastartup( wversionrequested, &wsadata );if ( err != 0 ) return false;if ( lobyte( wsadata.wversion ) != 2 | hibyte( wsadata.wversion ) != 2 ) wsacleanup( );return false; afxenablecontrolcontainer();wychatdlg.h的主要代码如下:#define msg_sock wm_user+1 /自行定义的winsock套接字消息编号/ cwychatdlg dialogclass cwychatdlg : public cdialog/ constructionpublic:cwychatdlg(cwnd* pparent = null);/ standard constructor cwychatdlg(); /自行添加的对话框析构函数/ dialog data/afx_data(cwychatdlg)enum idd = idd_wychat_dialog ;/ note: the classwizard will add data members here/afx_data/ classwizard generated virtual function overrides/afx_virtual(cwychatdlg)protected:virtual void dodataexchange(cdataexchange* pdx);/ ddx/ddv support/afx_virtual/ implementationprotected:hicon m_hicon;/ generated message map functions/afx_msg(cwychatdlg)virtual bool oninitdialog();afx_msg void onsyscommand(uint nid, lparam lparam);afx_msg void onpaint();afx_msg hcursor onquerydragicon();afx_msg void onsend();/afx_msg afx_msg void onsock(wparam,lparam); /自行添加的套接字响应函数declare_message_map()private:socket m_socket; /自行定义的私有套接字成员变量public:bool initsocket(); /自行定义的套接字初始化函数;wychatdlg.cpp的主要代码如下:cwychatdlg:cwychatdlg() /自行添加的析构函数 if(m_socket)closesocket(m_socket); /关闭套接字begin_message_map(cwychatdlg, cdialog)/afx_msg_map(cwychatdlg)on_wm_syscommand()on_wm_paint()on_wm_querydragicon()on_bn_clicked(idsend, onsend)/afx_msg_map on_message(msg_sock,onsock) /自行添加的消息关联end_message_map()/ cwychatdlg message handlersbool cwychatdlg:oninitdialog()cdialog:oninitdialog();/ add about. menu item to system menu./ idm_aboutbox must be in the system command range.assert(idm_aboutbox & 0xfff0) = idm_aboutbox);assert(idm_aboutbox appendmenu(mf_separator);psysmenu-appendmenu(mf_string, idm_aboutbox, straboutmenu);/ set the icon for this dialog. the framework does this automatically/ when the applications main window is not a dialogseticon(m_hicon, true);/ set big iconseticon(m_hicon, false);/ set small icon/ todo: add extra initialization hereinitsocket(); /自行添加的套接字初始化函数调用return true; / return true unless you set the focus to a controlbool cwychatdlg:initsocket() m_socket=socket(af_inet,sock_dgram,0); if(invalid_socket=m_socket) int a=wsagetlasterror(); cstring str; str.format(%d,a); messagebox(str); return false; sockaddr_in addrsock; addrsock.sin_addr.s_un .s_addr =inet_addr(127.0.0.1); addrsock.sin_family =af_inet; addrsock.sin_port =htons(5003); if(bind(m_socket,(sockaddr*)&addrsock,sizeof(sockaddr)=socket_error) / afxmessagebox(_t(bind failed!); int a=wsagetlasterror(); cstring str; str.format(bind=%d,a); afxmessagebox(str); return false; if(wsaasyncselect(m_socket,m_hwnd,msg_sock,fd_read|fd_write)=socket_error) afxmessagebox(_t(register read event of net failed!); return false; return true;void cwychatdlg:onsock(wparam wparam,lparam lparam) switch(loword(lparam)case fd_read:char buff254; sockaddr_in addr2; int n=sizeof(addr2); long charnum=0; cstring strfilelen=; charnum=:recvfrom(m_socket,buff,sizeof(buff),0,(sockaddr*)&addr2,&n); buffcharnum=0; /在接收缓冲区实际接收到的字符串尾部加上结束标志cstring strtemp; getdlgitemtext(idc_editchat,strtemp);strtemp=strtemp+rn+对方说:+buff; /setdlgitemtext(idc_editchat,buff); setdlgitemtext(idc_editchat,strtemp); updatedata(false);break; case fd_write: default: break;/ the system calls this to obtain the cursor to display while the user drags/ the minimized window.hcursor cwychatdlg:onquerydragicon()return (hcursor) m_hicon;void cwychatdlg:onsend() / todo: add your control notification handler code here cstring strsend; getdlgitemtext(idc_edit_send,strsend);sockaddr_in addr,addr2;int n=sizeof(addr2);char buff10=0;addr.sin_family=af_inet;addr.sin_port=htons(7600); /设置对方的端口号 addr.sin_addr.s_un.s_addr=inet_addr(127.0.0.1);/设置对方的ip/*int n1=strsend.getlength();cstring msg;msg.format(%d,n1); messagebox(msg);*/ if(strsend.getlength()!=0) :sendto(m_socket,strsend,strsend.getlength(),0,(sockaddr*)&addr,n); cstring strtemp; cstring mychat; getdlgitemtext(idc_editchat,strtemp); getdlgitemtext(idc_edit_send,mychat); strtemp=strtemp+rn+你说:+mychat; /setdlgitemtext(idc_editchat,buff); setdlgitemtext(idc_editchat,strtemp); setdlgitemtext(idc_edit_send,); else afxmessagebox(_t(不能发送空消息!);(3)聊天程序在局域网中两台不同电脑上的测试。每两个同学(称为甲乙)为一小组,分别在两台不同的电脑上编写程序,注意双方本机与远程机ip地址、端口号的正确设定。若程序编写好后,双方均启动程序,验证并观察双方的通信反馈信息,进行即时的点到点的在线聊天。在甲同学编写的wychatdlg.cpp文件中的bool cwychatdlg:initsocket()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年数字营销营销策略水平测试试卷及答案
- 2025年小学教育阶段教师考试试卷及答案
- 2025年通讯工程师考试试卷及答案
- 2025年心理测量与评估技术试题及答案
- 2025年亲子教育方法考试试题及答案
- 2025年美术专业基础考试题及答案
- 2025年金融分析师资格考试模拟试卷及答案
- 2025年机器学习工程师考试试题及答案
- 2025年电工职业资格考试题目及答案
- 2025年国际贸易实务操作复习试题及答案
- 胫骨骨折课件
- 人教版(2024新版)九年级上册化学:第四单元 课题3《物质组成的表示》教案教学设计
- 四川省高职单招餐饮类《中式烹饪技艺》复习备考试题库-上(选择题)
- 《建筑施工测量标准》JGJT408-2017
- 钢结构厂房施工组织设计
- ups电源维修合同范本
- 农业标准化与产业质量提升
- 国家基本药物(中成药)临床应用指南
- 古风围棋介绍
- 军事理论-综合版智慧树知到期末考试答案章节答案2024年国防大学
- 2022-2023学年上海市徐汇区高一下学期期末考试数学试题(解析版)
评论
0/150
提交评论