欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    《网络协议编程》实验报告单基于winsockAPI函数的MFC网络应用程序分析.doc

    • 资源ID:2389407       资源大小:117KB        全文页数:11页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《网络协议编程》实验报告单基于winsockAPI函数的MFC网络应用程序分析.doc

    实验一报告单班 级_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 < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the application's 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()函数中,有如下代码: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);上述代码是用于设定本机中套接字的本地端口的。在甲同学编写的WyChatDlg.cpp文件中的void CWyChatDlg:OnSend()函数中,有如下代码:addr.sin_family=AF_INET;addr.sin_port=htons(7600); /设置对方的端口号 addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");/设置对方的IP上述代码是用于设定对方的主机IP以及对应套接字的端口号码的。注意上述端口中一个为5003,一个为7600,注意乙同学的程序代码中,应该讲这两个端口号码交换过来。(4)聊天程序在同一台电脑上的测试。验证通过后,请每位同学在单机上调试验证,注意此时远程机IP为本机地址,即“127.0.0.1”。(5)聊天程序核心代码分析说明。9实验思考(1)若在聊天时,每个人都可设置自己的昵称,并可将该昵称发送给对方,程序应该如何修改?(2)若在一台电脑上调试程序,同时运行两个程序实例会出现错误吗?为什么会出现这样的错误?如何修改程序才能避免这样的错误呢?(3)实验中碰到一些什么样的其他问题?你是如何解决的?10实验心得

    注意事项

    本文(《网络协议编程》实验报告单基于winsockAPI函数的MFC网络应用程序分析.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开