MFC课程设计报告-3_第1页
MFC课程设计报告-3_第2页
MFC课程设计报告-3_第3页
MFC课程设计报告-3_第4页
MFC课程设计报告-3_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

贵州大学课程设计报告学院:明德学院专业:信息安全班级:071姓名王远睆(刘乙锟)学号072003110643设计组设计时间2010.12.4指导教师罗为成绩设计项目名称数据报套接字编程(用UDP实现计算机之间点对点会话)设计目的1、掌握数据报套接字编程的基本概念;2、了解使用UDP协议建立点对点会话的传输原理;3、了解CComm类的结构和原理;了解sendto函数和recvfrom函数的结构和原理;了解MFC编程平台的搭建和运用。设计要求注意观察结果,记录并分析编译系统的出错信息提示。设计原理运用UDP实现点对点对话,首先建立一个socket,然后同一个本地端口绑定在一起,确定端口和IP地址,利用socket发送和接收消息。设计仪器PC机MicrosoftVisualStudio2005环境设计步骤设计步骤1、启动MicrosoftVisualStudio2005开发环境从“文件”菜单中选择“新建”,选择“项目”,选择“Win32控制台应用程序”;在“名称(N)”处输入“wyh”;在“位置(L)”处选择D盘已经建立的wyh文件夹;显示“Win32应用程序向导---why”,选择“完成”;显示编辑页面;2、添加CComm类右键单击项目“wyh”,选择“添加(D)”---“类(C)”,显示“添加类-wyh”对话框,双击“C++类”选项,显示“一般C++类向导”对话框,在“类名(L)”处输入“CComm”,单击完成;3、添加“targetvar.h”头文件右键单击项目列表中的“头文件”,选择“添加(D)”中的“新建项(W)”,显示“添加新项-wyhl”对话框,选择“头文件(.h)”,在“名称(N)”处输入“targetver”,单击“添加(A)”,完成头文件添加;4、编写源程序文件参考程序见书p.111-115(注意理解实现原理;注意第一个程序中的listeningport=2000,destport=3000;第二个程序中listeningport=3000,destport=2000)5、调试并运行可执行程序(1)选择“调试(D)”,“启动调试”,弹出“wyh.exe”的DOS界面,显示“Initialization…聊天程序成功建立:<Ctrl-c>退出”;若无法程序显示出错,怎返回源代码编辑区,调试代码,直到成功运行;(2)与目标地址的组员建立连接并开始对话;输入“wangyuanhuan”;对方发来“liuyikun”6、设计成功实现。设计数据测试截图:己方(王远睆):对方(刘乙锟):设计总结理解了数据包套接字编程的概念,同时也通过实际的操作逐渐掌握数据包套接字编程。通过使用UDP实现计算机点对点对话,了解并掌握了UDP协议,并对其传输原理有了更深的理解和认识。对编程所运用到的的基本WinSock函数、Sendto函数等更加了解,并熟悉了其函数的运用。指导教师意见签名:年月日程序源代码头文件:Comm.h:#include"WinSock.h"#definesocklen_tint#pragmacomment(lib,"wsock32.lib")classCComm{private:SOCKETListenSocket;//等待接收数据的socketsockaddr_insrv;//绑定地址sockaddr_inclient;//发送数据过来的地址public:CComm();~CComm();staticvoidListenThread(void*data);boolSendMsg(char*Msg,intLen,char*host,shortport);boolListen(intPortNum);};stdafx.h://stdafx.h:标准系统包含文件的包含文件,//或是经常使用但不常更改的//特定于项目的包含文件//#pragmaonce#include"targetver.h"#include<stdio.h>#include<tchar.h>//TODO:在此处引用程序需要的其他头文件targetver.h:#pragmaonce//以下宏定义要求的最低平台。要求的最低平台//是具有运行应用程序所需功能的Windows、InternetExplorer等产品的//最早版本。通过在指定版本及更低版本的平台上启用所有可用的功能,宏可以//正常工作。//如果必须要针对低于以下指定版本的平台,请修改下列定义。//有关不同平台对应值的最新信息,请参考MSDN。#ifndef_WIN32_WINNT//指定要求的最低平台是WindowsVista。#define_WIN32_WINNT0x0600//将此值更改为相应的值,以适用于Windows的其他版本。#endif源文件:Comm.cpp:#include"StdAfx.h"#include"Comm.h"CComm::CComm(){//构造函数ListenSocket=INVALID_SOCKET;//开始设置为INVALID_SOCKET#ifdef_WIN32//如果是win32系统,则执行如下代码WORDVersionRequested=MAKEWORD(1,1);//第一个参数为低位字节,第二个为高位字节,//AorBshl16,二进制为//函数的结果是,也就是把两个byte组合成word型WSADATAwsaData;//WSA为WindowsSocketsAPI的缩写WSAStartup(VersionRequested,&wsaData);//启动winsock服务if(wsaData.wVersion!=VersionRequested){printf("WrongversionorWinSocknotloaded\n");fflush(0);//fflush()函数的作用是:将所有的缓冲结果写入一个文件中}#endif}//析构函数CComm::~CComm(){if(ListenSocket!=INVALID_SOCKET)closesocket(ListenSocket);//如果已经创建、则关闭#ifdef_WIN32//调用WSACleanupWSACleanup();#endif}//地址绑定,注意在UDP协议中,不需要listen,这里函数listen只是绑定一个端口boolCComm::Listen(intPortNum){//创建socketListenSocket=socket(PF_INET,SOCK_DGRAM,0);if(ListenSocket==INVALID_SOCKET){printf("Error:socket创建失败\n");fflush(0);returnfalse;}///设定地址srv.sin_family=PF_INET;srv.sin_addr.s_addr=htonl(INADDR_ANY);//任何地址//绑定端口srv.sin_port=htons(PortNum);if(bind(ListenSocket,(structsockaddr*)&srv,sizeof(srv))!=0){printf("Error:绑定失败\n");fflush(0);closesocket(ListenSocket);returnfalse;}intThreadID;//线程IDDWORDthread;//调用createthread创建线程ThreadID=(int)CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(CComm::ListenThread),(void*)this,0,&thread);ThreadID=ThreadID?0:1;//如果成功,则返回为if(ThreadID)//ThreadID如果不为,则线程创建失败{printf("线程创建失败\n");returnfalse;}elsereturntrue;}voidCComm::ListenThread(void*data){charbuf[4096];CComm*Comm=(CComm*)data;intlen=sizeof(Comm->client);//////获得地址的长度while(1)//获取数据,一直循环{//接收数据intresult=recvfrom(Comm->ListenSocket,buf,sizeof(buf)-1,0,(sockaddr*)&Comm->client,(socklen_t*)&len);if(result>0)//////////////如果获得数据{buf[result]=0;//获得发送端的地址和端口号printf("Messagereceivedfromhost%sport%i\n",inet_ntoa(Comm->client.sin_addr),ntohs(Comm->client.sin_port));printf(">>%s",buf);//输出接收到的数据fflush(0);}}}boolCComm::SendMsg(char*Msg,intLen,char*host,shortport){signedintSent;hostent*hostdata;if(atoi(host))//是否IP地址为标准形式{u_longip=inet_addr(host);//将一个点间隔地址转换成一个in_addrhostdata=gethostbyaddr((char*)&ip,sizeof(ip),PF_INET);//返回对应于给定地址的主机信息}else//否则可能是机器名{hostdata=gethostbyname(host);}if(!hostdata){printf("获得机器名错误\n");fflush(0);returnfalse;}sockaddr_indest;//发送目标地址dest.sin_family=PF_INET;dest.sin_addr=*(in_addr*)(hostdata->h_addr_list[0]);dest.sin_port=htons(port);//将主机的无符号短整形数转换成网络字节顺序//该函数原形为u_shortPASCALFARhtons(u_shorthostshort);printf("信息已经被发送到主机%s端口为%i\n",inet_ntoa(dest.sin_addr),ntohs(dest.sin_port));//数据发送Sent=sendto(ListenSocket,Msg,Len,0,(sockaddr*)&dest,sizeof(sockaddr_in));if(Sent!=Len){printf("错误发送UDP信息\n");fflush(0);returnfalse;}elsereturntrue;}stdafx.cpp://stdafx.cpp:只包括标准包含文件的源文件//wyh.pch将作为预编译头//stdafx.obj将包含预编译类型信息#include"stdafx.h"//TODO:在STDAFX.H中//引用任何所需的附

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论