ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:867.94KB ,
资源ID:18344203      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18344203.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(433X1《计算机网络原理》实验指导书Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

433X1《计算机网络原理》实验指导书Word格式文档下载.docx

1、三、实验要求:1按照实验内容和步骤完成各个实验;2在实验报告中要有详细地实验步骤以及结果;3. 按时上交实验报告。四、实验步骤1工程创建在VC6中新建一个新工程,选择:Win32 Console Application,输入工程名。具体方法:启动VC6.0,单击【File】-【New】,如图1所示;图1(1)服务器端创建:然后在【新建工程】的对话框中的【Projects】选项卡中选择:Win32 Console Application,输入一个工程名及保存路径,点击【确定】,如图2所示;图2(2)客户端创建:在【新建工程】的对话框中的【Projects】选项卡中选择:MFC AppWizard

2、exe,输入一个工程名及保存路径,点击【确定】,选择“单文档模式”,完后确定完成,如图3所示,完成后新建一个主界面窗体,如图4所示。图3图42Winsock初始化在Windows环境下进行网络程序设计时,所有的Winsock函数都是从ws2_32.dll导出的,我们可以通过#pragma comment(lib, ws2_32.lib)语句链接到该库文件。但在使用Winsock函数之前还必须调用WSAStartup函数对库资源进行初始化工作,使用完毕后,在退出程序之前,我们还必须调用WSACleanup函数来释放库资源。为了便于程序的设计,我们先设计一个CInitSock类来管理WinSock

3、库。在工程中添加新类的过程步骤如下:1)在VC6.0环境中点击【insert】-【new a class】菜单;2)在弹出的对话框中,选定class type为Generic Class,在Name输入框中输入类的名称CInitSock,然后点击确定即可。在InitSock.h和InitSock.cpp添加代码,详细代码如下所示。/ initSock.h /#if !defined(AFX_INITSOCK_H_70EFFE09_9598_4C98_A067_29100702ACE8_INCLUDED_)#define AFX_INITSOCK_H_70EFFE09_9598_4C98_A06

4、7_29100702ACE8_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER #pragma comment(lib, )#include winsock2.hclass CInitSock public: CInitSock(); virtual CInitSock();#endif / !/ InitSock.cpp: implementation of the CInitSock class. /InitSock.h/ Construction/DestructionCInitSock:CInitSock() WSADATA

5、 wsaData; WORD sockVersion = MAKEWORD(2, 2); if(:WSAStartup(sockVersion, &wsaData) != 0) exit(0);CInitSock() :WSACleanup();然后在工程中新建一个.cpp的源文件,在这个源文件中填写主函数代码,并且在这个.cpp源文件的开始部分包含如下头文件:”initSock.h”和”stdio.h”,还申明一个CInitSock类对象,具体代码可如下所示:stdio.hCInitSock initSock; / 初始化Winsock库,对库资源进行初始化工作,释放资源3.编程模式(1)服

6、务器端:函数具体说明请参考MSDN或者讲义或者教材。1)创建socketSocket函数的原型为:SOCKET socket(int family, int type, int protocol);创建一个流式套接字可以如下所示:SOCKET _socket=socket(AF_INET,SOCK_STREAM,0);创建一个数据报式套接字可以如下所示:SOCKET _socket=socket(AF_INET,SOCK_DGRAM,0);注:在面向TCP的应用中我们应该创建一个流式套接字。2)绑定bindbind函数的原型:int bind (SOCKET sockfd, const str

7、uct sockaddr *myaddr, socklen_t addrlen)绑定是将一个套接字和一个套接字地址绑定在一起,在调用bind之前还必须设定服务器地址。如下可以设定一个服务器地址:sockaddr_in serverAddress; /定义地址结构体serverAddress.sin_addr.S_un.S_addr= inet_addr(192.168.1.107); /服务器ip地址serverAddress.sin_family=AF_INET;serverAddress.sin_port=htons(6000); /服务器端口,例如使用6000下面的语句将套接字和地址se

8、rverAddress绑定在一起:bind(sockSrv, (SOCKADDR*)& serverAddress, sizeof(SOCKADDR);htonlhost to network long,就是把主机的字节顺序转化成网络上的字节顺序,参数为long int型;同理htonshost to network short,只不过参数为short int型。地址族必须为AF_INET,端口为6000,绑定的ip地址也可以用INADDR_ANY代替,表示可以用本机的任何IP地址。bind命令绑定本地刚才创建好的socket。格式如上。3)监听listenlisten函数的原型为:int l

9、isten(SOCKET sockfd, int queue_length);如下语句可以对一个套接字sockSrv进行监听:listen(sockSrv,5);4)接受连接accept,接收/发送数据send/recvsockaddr_in addrClient;int len=sizeof(SOCKADDR);char sendBuf = “TCP Server Demo!rn”;SOCKET sockConnect=accept(sockSrv, (SOCKADDR*)&addrClient, &len); /接受客户端连接if(sockConnect = INVALD_SOCKET)

10、/如果连接不成功 printf(“Failed accept!”); continue;printf(接受到一个连接:%s, inet_ntoa(addrClient.sin_addr); /显示客户端的IP/关闭连接套接字,终止通信closesocket(sockConnect);inet_ntoa函数转换Internet网络地址为点分十进制格式。5)发送/接收数据send/recvsend(sockConnect,sendBuf,strlen(sendBuf)+1,0); /发送数据recv(clientSocket,recvBuffer, strlen(recvBuffer),0); /

11、接收数据6)关闭监听套接字,终止服务器closesocket(sockSrv);(2)客户端:1)创建连接套接字SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0);2)设置通信地址struct sockaddr_in addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(/表示连接服务器的IPaddrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);3)向服务器提出连接请求:int con;con = connect(clientSocket,(SOCK

12、ADDR*)&addrSrv,sizeof(SOCKADDR);/连接服务器if(con != 0) /连接服务器失败cannot connect to servernreturn 0;4)连接成功后,接收服务器端发送来的信息char recvBuf100;int nRecv;nRecv = recv(clientSocket,recvBuf,100,0); /接收服务端的数据if(nRecv 0) recvBufnRecv = 0;接收到的数据:%sn,recvBuf);5)关闭套接字,终止通信closesocket(sockClient);4.项目简单演示1)开启服务器端,等待客户端连接2

13、)开启客户端,可以开启多个,为了达到效果,可以再不同的机器上开启客户端3)在客户端上点击“LINK”按钮,连接服务器。4)开始聊天,只要连接上服务器的客户端都会收到聊天信息,相当于简单的群聊。五、实验报告1完成本项目实验后,学生应提交实验报告。2实验报告格式与要求见附件。实验2NS2网络仿真实验1) 学生能够初步掌握NS2网络模拟平台,并且能够利用网络模拟平台进行简单的实验。2) 学习采用距离矢量算法(Distance Vector Algorithm)的动态路由。3) 加深对TCP 拥塞控制与流量控制机制的理解,并且能够为实验需要简单修改NS2 的核心模块。本实验分为三个实验过程,NS2平台

14、的坏境搭建、NS2网络路由协议的仿真以及要简单修改NS2 的核心模块。此外,在实验过程中需要同学们自学linux操作系统的安装和使用(可在虚拟机中安装linux,本实验指导书使用的VMware虚拟机中的ubuntu操作系统),熟悉linux下的软件开发过程(如vi编辑器,gcc编译器),熟悉Tcl和Otcl脚本语言,熟悉C+编程语言。三、实验要求1了解NS2的基本原理2熟悉Tcl和Otcl脚本语言3. 熟悉NS2的解不了模块4. 根据实验指导书搭好实验必需的坏境1NS2坏境搭建(1)点击下载ns2的最新版本ns-allinone-2.35, 并解压到对应目录下。(也可以用命令解压:tar zx

15、f ns-allinone-2.35.tar.gz 如果想看解压的输出过程:把zxf改为zxvf)。例如:$ tar zxvf ns-allinone-2.35.tar.gz(解压)$ sudo mkdir /usr/local/ns2(建立空文件夹)$ sudo mv ns-allinone-2.35 /usr/local/ns2(将ns2文件移动到新建的文件夹里)$ cd /usr/local/ns2/ns-allinone-2.35(转到ns2的文件夹中)(2)下载并安装下一步ns-2.35时所必需的软件包:$ sudo apt-get install build-essential$

16、sudo apt-get install tcl8.4 tcl8.4-dev tk8.4 tk8.4-dev$ sudo apt-get install libxmu-dev 当用apt-get更新软件包时常出现错误提示Unable to locate package update,解决方法是: 先更新apt-get#sudo apt-get update#sudo apt-get upgrade(3)输入cd 命令,转到ns-allinnone-2.35文件夹下,输入./install,进行安装。按下回车键,同学们可以休息一会啦,这个过程大概需要5 分钟左右(具体时间关乎机器的性能),5 分

17、钟之后大概出现如下提示:(不要关闭终端)Please put /usr/local/ns-allinone-2.35/bin:/usr/local/ns-allinone-2.35/tcl8.5.10/unix:/usr/local/ns-allinone-2.35/tk8.5.10/unixinto your PATH environment; so that youll be able to run itm/tclsh/wish/xgraph.IMPORTANT NOTICES:(1) You MUST put /usr/local/ns-allinone-2.35/otcl-1.14,

18、/usr/local/ns-allinone-2.35/lib, into your LD_LIBRARY_PATH environment variable. If it complains about X libraries, add path to your X libraries into LD_LIBRARY_PATH. If you are using csh, you can set it like: setenv LD_LIBRARY_PATH If you are using sh, you can set it like: export LD_LIBRARY_PATH=预设

19、队列的长度) n=0; isdrop=false; else 数据包入队; /丢数据包入列(3)修改drop-tail.cc 函数enque,具体代码图2 所示(4)动画演示与验证a.开始发生丢包,图3 所示。图3 开始发生丢包b.清空队列,把队列中的数据发送完再接受新的数据,图4 所示。图4 清空队列c.节点0 停止发送数据包,如5 所示。图5 节点0 停止发送数据包d.节点1 停止发送数据包,如图5 所示图5 节点1 停止发送数据包e.节点3 停止发送数据,如图6 所示,整个仿真也将结束。图6 节点3 停止发送数据f.通过实验演示得到了预期的实验结果,即一旦发生丢包后,节点会等到队列中的数据发送完后才会接受新的数据包。实验3ip数据包捕获

copyright@ 2008-2022 冰豆网网站版权所有

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