计算机网络课程设计任务书.doc_第1页
计算机网络课程设计任务书.doc_第2页
计算机网络课程设计任务书.doc_第3页
计算机网络课程设计任务书.doc_第4页
计算机网络课程设计任务书.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

郑州轻工业学院课 程 设 计 任 务 书题 目:Winsocket网络编程姓 名:齐津涛院(系):数学与信息科学系专业班级:信科09-1班学 号:540910010124指导教师:裴云霞,时海亮时 间:2012年6月17日至2012年6月22日26一、课程目标深入理解计算机网络基本原理,将书本上抽象的概念与具体的实现技术相结合,体会网络协议的设计与实现过程,以及专业技术人员所使用的基本方法和技巧;熟悉相关应用开发工具,掌握网络协议应用开发技术;进一步熟悉网络设备,学习组网技术,掌握网络规划与设计的基本方法;培养一定的自学能力和独立分析问题、解决问题的能力;对设计中遇到的问题,能通过独立思考、查阅资料、参考文献,寻求解决方案。二、设计题目说明设计题目设置上,采取了分类、分级的形式。分3个类别,分别是组网设计、WINSOCKET编程、网络服务编程。分3个级别,从高至低分别是A、B、C。题目的级别综合依据创新性、综合性、实用性、难度等因素,不同级别,成绩起评分数有别。A级题目(良-优):较难;综合性强、有明显或突出的创新、探究性较强、实际课题或项目的一部分(实用性);工作量非常饱满;富有建设性;有很强的分析问题与解决问题的能力。B级题目(中-良):难度适中;工作内容侧重于设计或研究或较高水平应用;有一定综合性、有一定创新、有一定实用性;工作量饱满;有较强的分析问题与解决问题的能力。C级题目(及格-中):难度不大或偏小;工作内容侧重于验证或学习或简单应用;基本上无创新;工作量不大;有一定的分析问题与解决问题的能力。三、任务完成形式(1)交付课程设计说明书(纸质)四、基本要求及主要内容第一类题目 基于WEB的动态网页制作设计要求通过以下过程:需求分析、E-R模型、关系模型分析,在数据库中构建数据库、表或视图,熟悉数据库开发流程;在时间允许的情况下,适当考虑页面的美观。1.网上报名、查分系统的设计与实现C2.基于Web的新闻发布系统C第二类题目 组网设计 (以方案设计为主,以网络仿真为辅,仿真部分需要用Packet Tracer)要求:(1)论文论述详尽,主要内容有:设计任务、需求分析、总体设计方案与拓扑图、设备选型、关键设计、仿真配置与测试、结论。(3)对方案中关键设计,尽可能用仿真软件进行仿真配置与测试。 组网仿真软件建议采用packet tracer(只能仿真cisco的部分中低端网络设备), 当然为了能在该软件中进行仿真,对原方案中的设计进行必要的简化、设备作必要的变通是必然的。(4)题目中的“某”,必须为具体的单位名称(最好为自己所熟悉的)(5)没有特别说明时,目标网络规模为中等规模的园区网络(信息节点数为500个到5000个之间)(6)没有特别说明时,VLAN技术、RIP或OSPF动态路由技术必须运用到设计中(7)没有特别说明时,支持internet接入1. 某校园网组网路由方案设计(基于Packet Tracer) A某大学网络有20000余信息节点,分办公、教学、学生宿舍、家属四个区,请结合实际分析其需求,重新对其网络进行规划设计:(1)技术选型、总体设计(2)设备选型(3)详细的拓扑设计(4)详细的IP规划(从网段到节点)(5)给出合理的路由方案、含internet出口与教育网出口路由(6)实现仿真配置与测试(7)支持远程用户访问2. 某校园网内网VLAN方案设计(基于Packet Tracer) B某大学网络有10000余信息节点,分办公、教学、学生宿舍、家属四个区,请结合实际分析其需求,重新对其网络进行规划设计,不考虑与外网的互联:(1)技术选型、总体设计(2)设备选型(3)详细的拓扑设计(4)IP规划、VLAN设计、(5)VLAN路由设计(6)实现仿真配置与测试3. 某单位(企业、医院、社区、学生公寓、学校、酒店)网络规划与设计(基于Packet Tracer)B对某单位的网络进行需求分析,完成下列设计任务:(1)给出技术选型、总体设计(2)给出设备选型(3)给出详细的拓扑设计(4)给出VLAN设计、ip规划(5)给出路由设计(6)实现仿真配置与测试第三类题目 winsocket网络编程掌握TCP和UDP套接字编程的原理1.局域网实时通讯工具A2.网络文件传输A五、主要参考文献1 Andrew S.Tanenbaum、David J.Wetherall. 计算机网络(英文版第5版). 机械工业出版社2谢希仁. 计算机网络(第5版). 电子工业出版社3吴功宜. 计算机网络课程设计. 机械工业出版社 /C语言编程4 王勇. 计算机网络课程设计(计算机课程设计与综合实践规划教材). 清华大学出版社 /Java编程5 叶树华. 网络编程实用教程(第2版). 人民邮电出版社.2010 /适合初学者6 王艳平. Windows网络与通信程序设计(第二版). 人民邮电出版社 /适合高手7 金华. C#网络编程技术教程(21世纪高等院校网络工程规划教材). 人民邮电出版社8 思科网络技术学院CCNA Exploration4.0LAN交换和无线9 思科网络技术学院CCNA Exploration4.0路由协议和概念完成期限:2012年6月23日指导教师签名:裴云霞课程负责人签名:裴云霞2012年6月17日摘 要本程序实现一个基于TCP/IP协议的较为简单的客户端/服务器通信的聊天室程序,在VISUAL C+平台上,使用MFC框架,编写了此程序。WINDOWS下编写网络应用程序利用SOCKET套接字进行数据通信,套接字可以理解为网络数据通信的一个代理。本程序即通过调用套接字函数,实现客户端与服务器的简单通信。关键字 聊天软件 WINSOCK 网络通信 MFC 套接字函数目录课 程 设 计 任 务 书1四、基本要求及主要内容2第一类题目 基于WEB的动态网页制作2第二类题目 组网设计31. 某校园网组网路由方案设计(基于Packet Tracer) A3某大学网络有20000余信息节点,分办公、教学、学生宿舍、家属四个区,3请结合实际分析其需求,重新对其网络进行规划设计:3(1)技术选型、总体设计3(2)设备选型3(3)详细的拓扑设计3(4)详细的IP规划(从网段到节点)3(5)给出合理的路由方案、含internet出口与教育网出口路由3(6)实现仿真配置与测试3(7)支持远程用户访问32. 某校园网内网VLAN方案设计(基于Packet Tracer) B3某大学网络有10000余信息节点,分办公、教学、学生宿舍、家属四个区,4请结合实际分析其需求,重新对其网络进行规划设计,不考虑与外网的互联:4(1)技术选型、总体设计4(2)设备选型4(3)详细的拓扑设计4(4)IP规划、VLAN设计、4(5)VLAN路由设计4(6)实现仿真配置与测试43. 某单位(企业、医院、社区、学生公寓、学校、酒店)网络规划与设计(基于Packet Tracer)B4对某单位的网络进行需求分析,完成下列设计任务:4(1)给出技术选型、总体设计4(2)给出设备选型4(3)给出详细的拓扑设计4(4)给出VLAN设计、ip规划4(5)给出路由设计4(6)实现仿真配置与测试4第三类题目 winsocket网络编程4五、主要参考文献4摘 要61.winsocket网络编程71.1概述71.2 TCP/IP特点91.3 WinSock模型101.4 套接字原理102. Socket编程的基本过程112.1设计流程112.2基本套接字153.程序的设计201、Socket服务器端:204服务器功能的实现355实验小结361.winsocket网络编程1.1概述80s初,ARPA(美国国防部高级研究计划局),加利福尼亚大学Berkeley分校提供资金,开发在UNIX下实现TCP/IP协议。为TCP/IP开发了一个API Socket接口(套接口) 俗称Bekeley套接口模型。90s初,Microsoft等公司基于Bekeley套接口模型制定了Windows Sockets规范(简称WinSock)已是TCP/IP网络的标准。1993.1,v1.11995.5,v2.0,增加了QOS (网络服务质量控制)1.2 TCP/IP特点TCP/IP协议的核心部分是传输层协议(TCP、UDP)、网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现,因此用户一般不涉及。编程时,编程界面有两种形式:第一种是由内核心直接提供的系统调用;第二种是使用以库函数方式提供的各种函数。前者为核内实现,后者为核外实现。用户服务要通过核外的应用程序才能实现,所以要使用套接字(socket)来实现。TCP/IP协议核心与应用程序关系如图所示。1.3 WinSock模型TCP(传输控制协议) 提供虚电路和面向连接的数据流传输服务。 实现无差错无重复的顺序数据传输。UDP(用户数据报协议)提供无连接的数据报传输服务。数据通过相互独立的报文进行传输,是无序的,并且不保证可靠、无差错。1.4 套接字原理客户机与服务器建立面向连接的(基于TCP)套接字进行通信,请求与响应过程及应用程序流程可用图7-3、图7- 4来表示。服务器端程序工作过程:(1)创建套接字(socket);(2)将套接字绑定到一个本地地址和端口上(bind);(3)将套接字设为监听模式,准备接收客户端请求(listen);(4)等待客户端请求,当请求到达后,接受连接请求,返回一个新的对应于此次连接的套接字(accept);(5)用返回的套接字和客户端进行通信(send/recv);(6)返回,等待另一客户请求;(7)关闭套接字;客户端程序工作过程:(1)创建套接字(socket);(2)向服务器端发出连接请求(connect);(3)和服务器端进行通信(send/recv);(4)关闭套接字;2. Socket编程的基本过程2.1设计流程对于任何基于WinSock的编程首先必须要初始化WinSock DLL库,使用接口函数:int WSAStarup( WORD wVersionRequested,LPWSADATA lpWsAData )初始化WinSock 。参数wVersionRequested是要求使用的WinSock的版本。Socket通信分为面向连接的通信(TCP)和面向无连接的通信(UDP),通信流程如下:面向连接的套接字的系统调用时序图面向连接的套接字的系统调用时序图无连接协议的套接字调用时序图面向连接的应用程序流程图2.2基本套接字2.2.1 创建套接字socket()功能:使用前创建一个新的套接字格式:SOCKET PASCAL FAR socket(int af,int type,int procotol);参数:af: 通信发生的区域type: 要建立的套接字类型procotol: 使用的特定协议2.2.2 指定本地地址bind()功能:将套接字地址与所创建的套接字号联系起来。格式:int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR * name,int namelen);参数:s: 是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。其它:没有错误,bind()返回0,否则SOCKET_ERROR地址结构说明: struct sockaddr_inshort sin_family;/AF_INETu_short sin_port;/16位端口号,网络字节顺序struct in_addr sin_addr;/32位IP地址,网络字节顺序char sin_zero8;/保留2.2.3 建立套接字连接connect()和accept()功能:共同完成连接工作格式:int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen);SOCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR * name,int FAR * addrlen);参数:同上2.2.4 监听连接listen()功能:用于面向连接服务器,表明它愿意接收连接。格式:int PASCAL FAR listen(SOCKET s, int backlog);2.2.5 数据传输send()与recv()功能:数据的发送与接收格式:int PASCAL FAR send(SOCKET s,const char FAR * buf,int len,int flags);int PASCAL FAR recv(SOCKET s,const char FAR * buf,int len,int flags);参数:buf:指向存有传输数据的缓冲区的指针。 2.2.6 多路复用select()功能:用来检测一个或多个套接字状态。格式:int PASCAL FAR select(int nfds, Error! Reference source not found.Error! Reference source not found.fd_set FAR * readfds,fd_set FAR * writefds, fd_set FAR * exceptfds,const struct timeval FAR * timeout);参数:readfds:指向要做读检测的指针writefds:指向要做写检测的指针exceptfds:指向要检测是否出错的指针timeout:最大等待时间select()* 执行同步I/O多路复用。 select函数的参数( int nfds, fd_set readfds, fd_set writefds, fd_set exceptfds, const struct timeval timeout ) 我记得是:第一个是个较为次要的值,设成0就行了。 后面的几个FD_SET类型的参数才是最重要的;第一个FD_SET型的参数readfds是表示要被检查是否可读的 Sockets,把你想要接收数据的那个套接字放在这里;第二个FD_SET参数ritefds是表示要被检查是否可写的 Sockets,将你要发送数据的套接字放在这里;还有个FD_SET参数exceptfds是表示要被检查是否有错误的 Sockets select() 函数的第五个参数timeout,是让我们用来设定 select 函数要等待(block)多久。兹述说如下: (1)如果 timeout 设为NULL,那么 select() 就会一直等到至少某 一个 socket 的事件成立了才会 return,这和其他的 blocking 函数一样。 select( ., NULL ) (2)如果 timeout 的值设为 0, 0 (秒, 微秒),那么 select() 在检查后, 不管有没有 socket 的事件成立,都会马上 return,而不会停留。 timeout.tv_sec = timeout.tv_usec = 0; select( ., &timeout ) (3)如果 timout 设为 m, n,那么就会等到至少某一个 socket 的事件发 生,或是时间到了(m 秒 n 微秒),才会 return。 timeout.tv_sec = m; timeout.tv_usec = n; select( ., &timeout ) 返回值:成功 - 符合条件的 Sockets 总数 (若 Timeout 发生,则为 0) 失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因) 说明: 使用者可利用此函式来检查 Sockets 是否有资料可被读取,或是有空间可以写入,或是有错误发生。 关于对FD_SET类型的操作,有几个比较重要的宏: FD_ZERO(*set) - 将 set 的值清乾净 FD_SET(s, *set) - 将 s 加到 set 中 FD_CLR(s, *set) - 将 s 从 set 中删除 FD_ISSET(s, *set) - 检查 s 是否存在於 set 中 参数 readfds、writefds、及 exceptfds 都是 called by value- result;而called by value-result的意思就是说,我们在将参数传给系统时,要先设启始值,并将这些参数的位址(address)告诉系统;而系统则会利用到这些值来做些运算或其他用途,最后并将结果再写回这些参数的位址中。 因此这些参数的值在传入前和函数返回后,可能会不同;所以每次调用 select() 前,对这些参数一定要重新设定它们的值。 假设我们要检查 socket 1 和 2 目前是否可以用来传送资料,以及 socket 3 是 否有资料可读;我们不打算检查 sockets 是否有错误发生,所以 exceptfds 设为 NULL。步骤大致如下: FD_ZERO( &writefds ); FD_ZERO( &readfds ); FD_SET( 1, &writefds ); FD_SET( 2, &writefds ); FD_SET( 3, &readfds ); select( ., &readfds, &writefds, NULL, .) if (FD_ISSET( 1, &writefds ) send( 1, data ); if (FD_ISSET( 2, &writefds ) send( 2, data ); if (FD_ISSET( 3, &readfds ) recv( 3, data );7、关闭套接字closesocket()功能:关闭套接字s格式:BOOL PASCAL FAR closesocket(SOCKET s);3.程序的设计1、Socket服务器端: Socket服务器端流程如下:加载套接字-创建监听的套接字-绑定套接字-监听套接字-处理客户端相关请求。 下面是孙鑫VC详解里面的服务器端的例子: C+代码 #include #include void main() /加载套接字 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested=MAKEWORD(1,1); err=WSAStartup(wVersionRequested,&wsaData); if (err!=0) return; if (LOBYTE(wsaData.wVersion)!=1| HIBYTE(wsaData.wVersion)!=1) WSACleanup(); return; /创建监听的套接字 SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);/把U_LONG的主机字节顺序转换为TCP/IP网络字节顺序 addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); /绑定套接字 bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR); /将套接字设置为监听模式,准备接受用户请求 listen(sockSrv,5); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); printf(%sn,welcome,the serve is started.); while (1) /等待用户请求到来 SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendBuf100; sprintf(sendBuf,welcome %s to ,inet_ntoa(addrClient.sin_addr); /发送数据 send(sockConn,sendBuf,100,0); char revBuf100; /接收数据 recv(sockConn,revBuf,100,0); /打印接受数据 printf(%sn,revBuf); /关闭套接字 closesocket(sockConn); #include #include void main()/加载套接字WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,&wsaData);if (err!=0)return;if (LOBYTE(wsaData.wVersion)!=1|HIBYTE(wsaData.wVersion)!=1)WSACleanup();return;/创建监听的套接字SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);/把U_LONG的主机字节顺序转换为TCP/IP网络字节顺序addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);/绑定套接字bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);/将套接字设置为监听模式,准备接受用户请求listen(sockSrv,5);SOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);printf(%sn,welcome,the serve is started.);while (1)/等待用户请求到来SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);char sendBuf100;sprintf(sendBuf,welcome %s to ,inet_ntoa(addrClient.sin_addr);/发送数据send(sockConn,sendBuf,100,0);char revBuf100;/接收数据recv(sockConn,revBuf,100,0);/打印接受数据printf(%sn,revBuf);/关闭套接字closesocket(sockConn);注意:需要包含头文件,并且在工程设置的link里面加上ws32_2.dll 如果在VC中还有一个简单的加载套接字的方法: C+代码 if (!AfxSocketInit() AfxMessageBox(套接字加载失败!); return false; if (!AfxSocketInit()AfxMessageBox(套接字加载失败!);return false;这个不需要包含上面注里面的头文件和ws2_32.lib库就可以实现加载套接字。 2、Socket客户端: Socket客户端同样需要先加载套接字,然后创建套接字,不过之后不用绑定和监听了,而是直接连接服务器,发送相关请求。 同样贴出孙鑫VC详解里面的客户端的例子:(不是我偷懒,是人家实在写的太好,无法超越 ) C+代码 #include #include void main() /加载套接字 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested=MAKEWORD(1,1); err=WSAStartup(wVersionRequested,&wsaData); if (err!=0) return; if (LOBYTE(wsaData.wVersion)!=1| HIBYTE(wsaData.wVersion)!=1) WSACleanup(); return; /创建套接字 SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr();/把U_LONG的主机字节顺序转换为TCP/IP网络字节顺序 addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); /向服务器发送请求 connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR); /接受数据 char recBuf100; recv(sockClient,recBuf,100,0); printf(%sn,recBuf); /发送数据 send(sock

温馨提示

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

最新文档

评论

0/150

提交评论