欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    计算机网络课程设计指导书11计算机网络工程.docx

    • 资源ID:8500123       资源大小:54.84KB        全文页数:33页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    计算机网络课程设计指导书11计算机网络工程.docx

    1、计算机网络课程设计指导书11计算机网络工程计 算 机 网 络课程设计指导书(11级计算机、网络工程专业)湖南科技大学计算机科学与工程学院2014年1月一、课程设计目的1加深对计算机网络通信系统的工作原理的理解通过编写计算机程序实现、模拟网络的某些功能,使学生理解并掌握计算机网络的基本工作原理及工作过程。2实现应用进程跨越网络的通信了解系统调用和应用编程接口基本知识,理解应用程序和操作系统之间传递控制权的机制,掌握套接字的创建和运用,通过socket系统调用实现跨网通信。3提高网络编程和应用的能力提高实际编程能力和灵活运用所学知识解决问题的能力。培养调查研究、查阅技术文献、资料、手册以及编写技术

    2、文档的能力,理论应用于实践的能力。二、课程设计要求1. 仔细分析每一个实验的具体内容、步骤和要求,按设计要求完成任务。2. 使用C和C+语言,用基础SOCKET编程方法实现设计功能。3. 程序设计需要完整的程序流程图、说明文档和源程序清单,设计者需要清楚每个模块的功能和原理。4. 完成程序的编写、编译、执行和测试,每人至少完成三个题目的设计工作。5. 提交课程设计报告(含括课程设计名称、课程设计题目、课程设计内容、课程设计步骤、调试过程、课程设计结果及结果分析、心得体会)、程序源文件、可执行文件各一份。三、课程设计考核方式1. 测试中演示所设计的程序,占总成绩30;2. 测试中回答指导老师所提

    3、出的问题,占总成绩20; 3. 设计报告,占总成绩40;4. 考勤情况,占总成绩10。三、课程设计题目1、网络聊天程序的设计与实现参照附录1,了解Socket通信的原理,在此基础上编写一个聊天程序。2、Ping程序设计与实现参照附录2,了解Ping程序的实现原理,并调试通过。如有可能则在此基础上,编写一个可以测试本局域网的所有机器是否在线的程序。如图1所示的QuickPing程序。图1 QuickPing运行界面效果图3、基于IP多播的网络会议程序参照附录3的局域网IP多播程序,设计一个图形界面的网络会议程序(实现文本多播方式即可)。4、网络嗅探器的设计与实现参照附录4 raw socket编

    4、程例子,设计一个可以监视网络的状态、数据流动情况以及网络上传输的信息的网络嗅探器。5、电子邮件客户端程序设计与实现参照教材6.5节原理,设计一个电子邮件客户端程序。6、TELNET终端设计与实现参照RFC854、RFC855文档,设计一个TELNET终端程序。7、网络代理服务器的设计与实现实现一个简易的proxy程序。proxy程序的功能:能够做“二传手”的工作。它自身处在能同时连通外界目标服务器和我的机器的位置上。我的机器把请求发送给它,它接受请求,把请求原封不动的抄下来发送给外界目标服务器;外界目标服务器响应了请求,把回答发送给它,它再接受回答,把回答原封不动的抄下来发送给我的机器。这样,

    5、我的机器实际上是把它当作了目标服务器(由于是原封不动的转抄,请求和回答没有被修改)。而它则是外界目标服务器的客户端。四、推荐参考文献1 谢希仁,计算机网络(第五版),电子工业出版社,2008.2 Andrew S.Tanenbaum.计算机网络(第四版)M.北京:清华大学出版社,2004.3 中国Linux论坛:4 UNIX技术网站(永远的UNIX):5 Google 6 蒋清明,C语言程序设计,人民邮电出版社,2008.7 陈维兴,林小茶, C+面向对象程序设计(第二版), 中国铁道出版社, 2009年12月五、附录附录1:Windows Socket编程简介附录2:PING源代码附录3:用

    6、Visual C+实现局域网IP多播附录4:raw socket编程例子(基于LINUX操作系统)附录5:课程设计报告封面设计附录1、Windows Socket编程简介使用WinSock API的编程,应该了解TCP/IP的基础知识。虽然你可以直接使用WinSock API来写网络应用程序,但是,要写出优秀的网络应用程序,还是必须对TCP/IP协议有一些了解的。1. TCP/IP协议与WinSock网络编程接口的关系WinSock 并不是一种网络协议,它只是一个网络编程接口,也就是说,它不是协议,但是它可以访问很多种网络协议,你可以把它当作一些协议的封装。现在的 WinSock已经基本上实现

    7、了与协议无关。你可以使用WinSock来调用多种协议的功能。那么,WinSock和TCP/IP协议到底是什么关系呢?实际上,WinSock就是TCP/IP协议的一种封装,你可以通过调用WinSock的接口函数来调用TCP/IP的各种功能.例如我想用TCP/IP 协议发送数据,你就可以使用WinSock的接口函数Send()来调用TCP/IP的发送数据功能,至于具体怎么发送数据,WinSock已经帮你封装好了这种功能。2、TCP/IP协议介绍TCP/IP协议包含的范围非常的广,它是一种四层协议,包含了各种硬件、软件需求的定义。TCP/IP协议确切的说法应该是TCP/UDP/IP协议。UDP协议(

    8、User Datagram Protocol 用户数据报协议),是一种保护消息边界的,不保障可靠数据的传输。TCP协议(Transmission Control Protocol 传输控制协议),是一种流传输的协议。他提供可靠的、有序的、双向的、面向连接的传输。保护消息边界,就是指传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息。也就是说存在保护消息边界,接收端一次只能接收发送端发出的一个数据包。而面向流则是指无保护消息边界的,如果发送端连续发送数据,接收端有可能在一次接收动作中,会接收两个或者更多的数据包。举例来说,假如,我们连续发送三个数据包,大小分别是2k、4k、8k

    9、,这三个数据包都已经到达了接收端的网络堆栈中,如果使用UDP协议,不管我们使用多大的接收缓冲区去接收数据,我们必须有三次接收动作,才能够把所有的数据包接收完。而使用TCP协议,我们只要把接收的缓冲区大小设置在14k以上,我们就能够一次把所有的数据包接收下来,只需要有一次接收动作。这就是因为UDP协议的保护消息边界使得每一个消息都是独立的。而流传输,却把数据当作一串数据流,它不认为数据是一个一个的消息。所以有很多人在使用TCP协议通讯的时候,并不清楚TCP是基于流的传输,当连续发送数据的时候,他们时常会认识TCP会丢包。其实不然,因为当它们使用的缓冲区足够大时,它们有可能会一次接收到两个甚至更多

    10、的数据包,而很多人往往会忽视这一点,只解析检查了第一个数据包,而已经接收的其它据包却被忽略了。3WinSock编程简单流程WinSock编程分为服务器端和客户端两部分,TCP服务器端的大体流程如下:对于任何基于WinSock的编程首先必须要初始化WinSock DLL库。int WSAStarup( WORD wVersionRequested,LPWSADATA lpWsAData )。wVersionRequested是我们要求使用的WinSock的版本。调用这个接口函数可以初始化WinSock 。然后必须创建一个套接字(Socket)。SOCKET Socket(int af,int t

    11、ype,int protocol);套接字可以说是WinSock通讯的核心。WinSock通讯的所有数据传输,都是通过套接字来完成的,套接字包含了两个信息,一个是IP地址,一个是Port端口号,使用这两个信息,就可以确定网络中的任何一个通讯节点。当调用了Socket()接口函数创建了一个套接字后,必须把套接字与你需要进行通讯的地址建立联系,可以通过绑定函数bind来实现这种联系。int bind(SOCKET s,const struct sockaddr FAR* name,int namelen) ;struct sockaddr_inshort sin_family ;u_short s

    12、in_port;struct in_addr sin_addr ;char sin_sero8 ;就包含了需要建立连接的本地的地址,包括地址族、IP和端口信息。sin_family字段必须把它设为AF_INET,这是告诉WinSock使用的是IP地址族。sin_port就是要用来通讯的端口号。sin_addr就是要用来通讯的IP地址信息。在这里,必须还得提一下有关大头(big-endian)小头(little-endian)。因为各种不同的计算机处理数据时的方法是不一样的,Intel X86处理器上是用小头形式来表示多字节的编号,就是把低字节放在前面,把高字节放在后面,而互联网标准却正好相反,

    13、所以,必须把主机字节转换成网络字节的顺序。WinSock API提供了几个函数。把主机字节转化成网络字节的函数;u_long htonl(u_long hostlong);u_short htons(u_short hostshort);把网络字节转化成主机字节的函数;u_long ntohl(u_long netlong);u_short ntohs(u_short netshort) ;这样,设置IP地址和port端口时,就必须把主机字节转化成网络字节后,才能用Bind()函数来绑定套接字和地址。当绑定完成之后,服务器端必须建立一个监听的队列来接收客户端的连接请求。int listen(S

    14、OCKET s,int backlog);这个函数可以把套接字转成监听模式。如果客户端有了连接请求,我们还必须使用int accept(SOCKET s,struct sockaddr FAR* addr,int FAR* addrlen);来接受客户端的请求。现在基本上已经完成了一个服务器的建立,而客户端的建立的流程则是初始化WinSock,然后创建Socket套接字,再使用int connect(SOCKET s,const struct sockaddr FAR* name,int namelen) ;来连接服务端。下面是一个最简单的创建服务器端和客户端的例子:服务器端的创建:WSADA

    15、TA wsd;SOCKET sListen;SOCKET sclient;UINT port = 800;int iAddrSize;struct sockaddr_in local , client;WSAStartup( 0x11 , &wsd );sListen = Socket ( AF_INET , SOCK_STREAM , IPPOTO_IP );local.sin_family = AF_INET;local.sin_addr = htonl( INADDR_ANY );local.sin_port = htons( port );bind( sListen , (struct

    16、 sockaddr*)&local , sizeof( local ) );listen( sListen , 5 );sClient = accept( sListen , (struct sockaddr*)&client , &iAddrSize );客户端的创建:WSADATA wsd;SOCKET sClient;UINT port = 800;char szIp = 127.0.0.1;int iAddrSize;struct sockaddr_in server;WSAStartup( 0x11 , &wsd );sClient = Socket ( AF_INET , SOCK

    17、_STREAM , IPPOTO_IP );server.sin_family = AF_INET;server.sin_addr = inet_addr( szIp );server.sin_port = htons( port );connect( sClient , (struct sockaddr*)&server , sizeof( server ) );当服务器端和客户端建立连接以后,无论是客户端,还是服务器端都可以使用int send( SOCKET s,const char FAR* buf,int len,int flags);int recv( SOCKET s,char

    18、FAR* buf,int len,int flags);函数来接收和发送数据,因为,TCP连接是双向的。当要关闭通讯连接的时候,任何一方都可以调用int shutdown(SOCKET s,int how);来关闭套接字的指定功能,再调用int closeSocket(SOCKET s) ;来关闭套接字句柄,这样一个通讯过程就算完成了。计算机网络(第5版)280页图6-32所示的系统调用使用顺序:注意:上面的代码没有任何检查函数返回值,如果你作网络编程就一定要检查任何一个WinSock API函数的调用结果,因为很多时候函数调用并不一定成功。上面介绍的函数,返回值类型是int的话,如果函数调用

    19、失败的话,返回的都是SOCKET_ERROR。4VC中socket编程步骤sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。在这个程序中,将两个工程添加到一个工作区。要链接一个ws2_32.lib的库文件。服务器端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket();2:绑定套接字到一个IP地址和一个端口上(bind();3:将套接字设置为监听模式等待连接请求(listen();4:请求到来后,接受连接请求,返回一个新的对

    20、应于此次连接的套接字(accept();5:用返回的套接字和客户端进行通信(send()/recv();6:返回,等待另一连接请求;7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup()。服务器端代码如下:#include #include void main() WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0

    21、 ) 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); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKAD

    22、DR*)&addrSrv,sizeof(SOCKADDR); listen(sockSrv,5); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(1) SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendBuf50; sprintf(sendBuf,Welcome %s to here!,inet_ntoa(addrClient.sin_addr); send(sockConn,sendBuf,strlen(sendBuf)+1,0); ch

    23、ar recvBuf50; recv(sockConn,recvBuf,50,0); printf(%sn,recvBuf); closesocket(sockConn); 客户端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket();2:向服务器发出连接请求(connect();3:和服务器端进行通信(send()/recv();4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup()。客户端的代码如下:#include #include void main() WORD wVersionRequested; WSADATA ws

    24、aData; 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

    25、.sin_addr.S_un.S_addr=inet_addr(127.0.0.1); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR); send(sockClient,hello,strlen(hello)+1,0); char recvBuf50; recv(sockClient,recvBuf,50,0); printf(%sn,recvBuf); closesocket(sockClient); WSACle

    26、anup();附录2、PING源代码/ PING.H#define WIN32_LEAN_AND_MEAN#include #include #include #include #include typedef struct tagIP_HEADER unsigned int h_len:4; /length of header (4b) unsigned int ver:4; /version (4b) unsigned char tos; /tos (1B) unsigned short total_len; /total length (2B) unsigned short ident;

    27、 /identification (2B) unsigned short frag_flags; /frag and flags (2B) unsigned char ttl; /time of lives (1B) unsigned char protocol; /protocol (1B) unsigned short checksum; /checksum (2B) unsigned int sourceip; /source ip (4B) unsigned int destip; /destination ip (4B)IP_HEADER,*PIP_HEADER; /length o

    28、f total (20B)typedef struct tagIP_OPT_HEADER unsigned char code; /option type (1B) unsigned char len; /length of option header (1B) unsigned char ptr; /下一个可存放地址的位置 (1B) unsigned long addr9; /list of ip address (4B/d)IP_OPT_HEADER,*PIP_OPT_HEADER; /length of total (39B)typedef struct tagICMP_HEADER u

    29、nsigned char type; /icmp type (1B) unsigned char code; /code of type (1B) unsigned short checksum; /checksum (2B) unsigned short id; /identification (2B) unsigned short seq; /sequence (2B) unsigned long timestamp; / (2B) /this is not standard header,but we reserve space for timeICMP_HEADER,*PICMP_HEADER; /total length (10B)#define DEF_PACKET_SIZE 32#define MAX_PACKET_SIZE 1024#define ICMP_ECHO 8#define ICMP_ECHOREPLY 0#define IP_RECORD_ROUTER 7void usageinfo(char *progname);void FillIcmpData(char *icmp_data,int size);USHORT CheckSum(USHORT *buf,int size);void DecodeIcmpHeade


    注意事项

    本文(计算机网络课程设计指导书11计算机网络工程.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开