[工学]TCP、IP网络环境编程实验报告14_第1页
[工学]TCP、IP网络环境编程实验报告14_第2页
[工学]TCP、IP网络环境编程实验报告14_第3页
[工学]TCP、IP网络环境编程实验报告14_第4页
[工学]TCP、IP网络环境编程实验报告14_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、福建农林大学计算机与信息学院(程序设计类课程)实验报告课程名称:网络环境编程姓 名:张文绮系:计算机专 业:计算机科学与技术年 级:2009级学 号:091150022指导教师:林要华职 称:副教授2012年 6 月 10 日实验项目列表序号实验项目名称成绩指导教师1实验一 arp协议实验分析林要华2实验二 tcp数据通信林要华3实验三 套接字编程-c/s模型通信林要华4实验四 基于winsock 2的ip多播应用程序林要华56789101112福建农林大学计算机与信息学院实验报告系: 计算机科学与技术 专业: 计算机科学与技术 年级: 2009 姓名: 张文绮 学号: 091150022 实

2、验课程: 网络环境编程 实验室号_田c514_ 计算机号 22 实验时间: 3.20 指导教师签字: 林要华 成绩: 实验一 arp协议实验分析一、实验目的1. 熟悉arp的工作过程;2. 熟悉arp的数据包结构。二、实验环境与设备本实验在实际因特网环境下进行操作,需要的设备有:一台pc机,wireshark监听软件。wireshark监听软件可从网址:/下载。三、实验原理1网络协议分析器wireshark 是一款非常棒的unix和windows上的开源网络协议分析器。它可以实时检测网络通讯数据,也可以检测其抓取的网络通讯数据快照文件。可以通过图形

3、界面浏览这些数据,可以查看网络通讯数据包中每一层的详细内容, wireshark拥有许多强大的特性:包含有强显示过滤器语言(rich display filter language)和查看tcp会话重构流的能力;它更支持上百种协议和媒体类型; 拥有一个类似tcpdump(linux下的网络协议分析工具)的名为ethereal的的命令行版本。2网络监听原理在共享式局域网中,位于同一网段的每台主机都可以截获在网络中传输的所有数据,正常情况下,一个网卡只响应目的地址为单播地址和广播地址的mac帧而忽略其它mac帧,网卡接收这两种帧时,通过cpu产生一个硬件中断,然后由操作系统负责处理该中断,对数据帧

4、中的数据做进一步处理。如果将网卡设置为混杂(promiscuous)模式,则可接收所有经过该网卡的数据帧。交换式网络设备能将数据准确地发给目的主机,而不会同时发给其他计算机,所在在交换网络环境下,实现数据包的监听要复杂些,主要方法有:(1)对交换机实行端口镜像,将其他端口的数据全部映射到镜像端口,连接在镜像端口上的计算机就可以实施监听了。(2)将监听程序放在网关或代理服务器上,可抓取整个局域网的数据包。网络监听的防范方法主要有:从逻辑或物理上对网络分段;以交换机代替共享共享集线器;使用加密技术;划分vlan。3 arp协议的原理介绍arp协议之前必须知道为什么需要知道arp协议, 因为当我们在

5、访问某个网络或者ping某个网址如:ping 时候, 接着会产生什么呢? 这就是我们上一堂课的内容了,dns原理,可以访问: 简单说dns就是解析 成为ip地址, 但是在网络中数据传输是以帧的形式进行传输,而帧中有目标主机的mac地址,(mac地址即硬件地址,每台主机上都有唯一的一个地址),本地主机在向目标主机发送帧前,将目标主机ip地址解析成为mac地址,这就是通过apr协议来完成的。首先,我们假设有两台主机a,b在互相通信,假设a(),b()双方都知道对方的ip地址,如果a主机要向b主机发送“hello”,那么a主机(当然如果在a主机中已经缓存有

6、b主机的mac地址(硬件地址)那么就不用再去进行下面的查找了),首先要在网络上发送广播(一般都是在同一个网段内进行的),广播信息类似于“的mac地址(硬件地址)是什么”,如果b主机听见了,那么b主机就会发送“的mac地址,这样a主机就知道b主机的mac地址,所以发送数据帧时,加上mac地址就不怕找不到目标主机的了。完成广播后,a主机会将mac地址加入到arp缓存表(所谓arp缓存表就是一张实现ip和mac地址进行一一对应的表,并且存储起来),以备下次再使用。4 arp帧结构 以太网帧头中的前两个字段是以太网的目的地址和源地址。目的地址为全1时为广播地

7、址。 两个字节长的以太网帧类型表示后面数据的类型。对于arp请求或应答来说,该字段的值为0x0806. 硬件类型字段:指明了发送方想知道的硬件地址的类型,以太网的值为1; 协议类型字段:表示要映射的协议地址类型,ip为0x0800; 硬件地址长度和协议地址长度:指明了硬件地址和高层协议地址的长度,这样arp帧就可以在任意硬件和任意协议的网络中使用。对于以太网上ip地址的arp请求或应答来说,它们的值分别为6和4; 操作字段:用来表示这个报文的类型,arp请求为1,arp响应为2,rarp请求为3,rarp响应为4; 发送端的以太网地址:源主机硬件地址,6个字节; 发送端ip地址:发送端的协议地

8、址(ip地址),4个字节; 目的以太网地址:目的端硬件地址,6个字节; 目的ip地址:目的端的协议地址(ip地址),4个字节。四、实验内容1. 用wireshark捕获arp数据帧,并分析格式和内容。五、实验步骤1.安装并运行wireshark开始捕获数据包,如图所示点击第二行的start开始捕获数据包。2.几分钟后就捕获到许多的数据包了,主界面如图所示:如上图所示,可看到很多捕获的数据。 第一列是捕获数据的编号; 第二列是捕获数据的相对时间,从开始捕获算为0.000秒; 第三列是源地址,第四列是目的地址; 第五列是数据包的信息。 选中第一个数据帧,然后从整体上看看wireshark的窗口,主

9、要被分成三部分。上面部分是所有数据帧的列表;中间部分是数据帧的描述信息;下面部分是帧里面的数据。3.开始分析数据(1)在下图中filter后面的编辑框中输入:arp(注意是小写),然后回车或者点击“apply”按钮现在只有arp协议了,其他的协议数据包都被过滤掉了。注意到中间部分的三行前面都有一个“+”,点击它,这一行就会被展开。如下图所示:(2)现在展开第一行。看到的结果如下:在上图中我们看到这个帧的一些基本信息: 帧的编号:15(捕获时的编号) 帧的大小:60字节。再加上四个字节的crc计算在里面,就刚好满足最小64字节的要求。 帧被捕获的日期和时间:dec 2,2008 帧距离前一个帧的

10、捕获时间差:0.136438000 帧距离第一个帧的捕获时间差:4.704371000 帧装载的协议:arp(3)现在展开第二行:我们可以看到:目的地址(destination):ff:ff:ff:ff:ff:ff (这是个mac地址,这个mac地址是一个广播地址,就是局域网中的所有计算机都会接收这个数据帧)源地址(source):elitegro_2d:e7:db (00:0d:87:2d:e7:db)帧中封装的协议类型:0x0806,这个是arp协议的类型编号。trailer:是协议中填充的数据,为了保证帧最少有64字节。(4)展开第三行: 地址解析协议 硬件类型:以太网 协议类型:ip

11、硬件大小:6 协议大小:4 发送方mac地址 发送方ip地址 目的mac地址 目的ip地址注:这些地址必须要用“点分十进制”形式明确表示出来六、练习1请参考实验步骤,利用wireshark软件,自己在宿舍里进行监听实验(比如:ping一台主机、访问一个网站的主页或访问一个ftp站点)。而后从捕获的数据中查出三种应用对应的数据,并对其分析。解答如下:在实验过程中我遇到了一些麻烦,我是把笔记本电脑拿到北区图书馆用无线做实验,打开wireshark时,选择无线接口:选完之后点开始,一直提示:自己想想,可能是网卡设置问题,但是wireshark已经是识别无线的网卡信息了,但就是读不出来。我再换了宽带接

12、口,换了宽带接口终于可以显示各种数据报了,但是等了很久,就是没出现arp报文:再后来我决定用虚拟机做实验。用到了两台主机a,b,其主机a(/24)我是用物理机做,主机b(/24)我用虚拟机做。a和b在互相通信:在主机a上ping主机b的ip():在主机b上ping主机a的ip():主机a和主机b可以互相通信。主机a(),b(),双方都知道对方的ip地址,如果a主机要向b主机发送“hello”,那么a主机(当然如果在a主机中已经缓存有b主机的

13、mac地址(硬件地址)那么就不用再去进行下面的查找了),首先要在网络上发送广播(一般都是在同一个网段内进行的),广播信息类似于“的mac地址(硬件地址)是什么”,如果b主机听见了,那么b主机就会发送“的mac地址,这样a主机就知道b主机的mac地址,所以发送数据帧时,加上mac地址就不怕找不到目标主机的了。完成广播后,a主机会将mac地址加入到arp缓存表(所谓arp缓存表就是一张实现ip和mac地址进行一一对应的表,并且存储起来),以备下次再使用。在wireshark中过滤到的arp包:arp包不断地跳出来,选择一个点进去:下面来分析捕获到的a

14、rp请求帧:(1) 现在展开第一行,看到的结果如下: 帧的编号为:74 帧的长度:42字节 帧被捕获的日期和时间:apr 5,2012 帧距离前一个帧的捕获时间差:6.672333000 帧距离第一个帧的捕获时间差:7.6812484000 帧装载的协议:arp(2) 现在展开第二行:我们可以看到:目的地址(destination):ff:ff:ff:ff:ff:ff (这是个mac地址,这个mac地址是一个广播地址,就是局域网中的所有计算机都会接收这个数据帧)源mac地址vmware_ab:60:57(00:0c:29:ab:60:57)帧中封装的协议类型:0x0806,这个是arp协议的类

15、型编号。trailer:是协议中填充的数据,为了保证帧最少有64字节。(3) 展开第三行: 地址解析协议 硬件类型:以太网 协议类型:ip(0x0800) 硬件大小:6 协议大小:4 发送方mac地址: 00:0c:29:ab:60:57 发送方ip地址:(b主机) 目的mac地址:00:00:00:00:00:00 目的ip地址:(a主机)wireshark网络协议分析工具捕捉到完整的arp请求帧:七、思考1.许多系统管理员都不允许用户在共享网络上运行监听软件,你认为这是为什么?调查一下你经常使用的网络的管理策略,能找到允许进行监听的网络吗

16、?解答:当运行监听软件的主机在监听的过程中,只是被动的接收在以太网中传输的信息,它不会跟其它的主机交换信息的,也不能修改在网络中传输的信息包。当运行监听软件的时候,主机响应一般会受到影响变的会慢,特别是在网络共享的环境下,带宽的利用被占用了,主机的响应会受到影响,所以一般通过响应的速率来判断是否受到监听。我所在的上网环境中,由于大家的网络安全意识较薄弱,很多同学也没意识到怎么去修改相关的网络管理策略,被入侵了还不知道,我经常能够进行监听别的网络。通过一些端口或者网络分析软件,通常是可以扫描出一些黑客需要的信息,一旦黑客掌握了这些信息,就对黑客有利可图了。福建农林大学计算机与信息学院实验报告系:

17、 计算机科学与技术 专业: 计算机科学与技术 年级: 2009 姓名: 张文绮 学号: 091150022 实验课程: 网络环境编程 实验室号_田c514_ 计算机号 22 实验时间: 4.13 指导教师签字: 林要华 成绩: 实验二 tcp数据通信一、实验目的1理解tcp报文段首部各字段的含义;2理解tcp建立连接的三次握手机制;3了解tcp的确认机制;4了解tcp的流量控制和拥塞控制。二、实验环境与设备本实验在实际因特网环境下进行操作,需要的设备有:一台pc机,wireshark监听软件。wireshark监听软件可从网址:/下载。三、实验原理

18、tcp是因特网中最主要的运输层协议,它能够在两个应用程序章提供可靠的、有序的数据流传输,能够检测传输过程中分组是否丢失、失序和改变,并利用重传机制保证分组可靠地传输到接收方。tcp的首部格式如下图所示位0 8 16 24 31目的端口数据偏移检验和选项 (长度可变)源端口序号紧急指针窗口确认号保留标志填充首先是源端口和目的端口,服务器提供服务的端口号是固定的,比如:web服务端口号是80,而客户端的端口号是由操作系统随机分配一个用户端口号。tcp提供字节流服务,它为分组中的每个字节编号,首部中的序号表示分组中第一个字节的编号。接收方用确认号表示它期望接收的数据流中下一个字节编号,表明确认号之前

19、的字节接收方都已经正确接收了。数据偏移字段表示报文段的首部长度。标志部分包含6个标志位,ack位表明确认号字段是否有效;push位表示发送端应用程序要求数据立即发送;syn、fin、reset三位用来建立连接和关闭连接;urg和紧急指针通常较少使用。接收端利用窗口字段通知发送方它能够接收多大数据量。检验和字段是接收方用来检验接收的报文是否在传输过程中出现了比特错。关于tcp首部各字段的详细说明请参考教材。tcp重传机制:当发送方传输一个报文段的同时启动一个重传计时器,当该报文的确认到达时,这个计时器就会取消,如果这个计时器超时,那么数据将会被重传。tcp在重传之前,并不总是等待重传计时器超时,

20、tcp也会把一系列重复确认的分组当作是数据丢失的先兆。四、实验内容 用wireshark捕获建立tcp连接的3次握手过程的数据帧,并对其进行分析。五、实验步骤(参考1.打开capture-interface菜单,选择合适的网络接口,进行实时抓包,实时抓包具有更好的教学效果。设置显示过滤器为tcp,端口为80。这样网络包列表里面就仅显示传输层协议为tcp、端口为80的包。在浏览器里面输入网址,访问谷歌的首页,这样即产生tcp流量。此时,wireshark已经存有教学所需的网络包,因此停止实时抓包,进行后续的分析工作。2根据网络包列表窗口可以判断出,哪些包是一次会话的开始,源ip地址为192.16

21、8.1.101(后面称为主机),目的ip地址为9(后面称谷歌网站),协议为tcp。在这里可以通过在cmd窗口中输入ipconfig命令,说明本机ip地址为01;用nslookup 表明9为谷歌网站的ip地址。然后,注意包头详细信息窗口,可以看到当前选中的网络包的序列号(sequence number)为0,标志(flags)位syn被设置为1,即为主机向谷歌网站发起建立连接请求的syn包。3接下来,为tcp三次握手的第二步,源ip地址为01,目的ip地址为9。然后,将注意力转向包

22、头详细信息子窗口,可以看到序列号为:0;确认号为:1,即0+1,并且注意到syn和ack标志位均已设置为1。表明该tcp包是对第一步中tcp包的确认,并同时请求同步,即ack-syn包。4接下来是tcp三次握手的第三步主机发送tcp包给谷歌网站,其序列号是1,表明请求的下一个tcp包的序列号为1;确认号为1,表明是对第75个包的确认,而且其ack位为1,即ack包。5至此,tcp协议的三次握手过程已经完成,主机和谷歌网站之间已经建立连接,可以进行数据传输。六、练习请在一个重流量网络中监听一个tcp连接过程,并进行如下分析:实验过程:源ip 地址为:5目的ip地址为:203

23、.208.46.146, 47, 48, 44,45(谷歌服务器有多个ip地址)在wireshark的显示过滤器中输入:tcp.port = 80 and ip.src = 57 and ip.dst = 09进行过滤得到截图为:包头详细信息窗口,可以看到当前选中的网络包的序列号(sequence number )为0 ,标志(flags )位syn 被设置为1 ,即为主机向谷歌网站发起建立连接请求的syn 包。下面截取一段进行分析:tcp第一次握手:主

24、机57向谷歌服务器09发送请求,同步位置为1,建立连接请求的syn 包。其中序列号(sequence number )为0 ,标志(flags )位syn 被设置为1。syn 包:tcp第二次握手:可以看到序列号为:0 ;确认号为:1 ,即0+1 ,并且注意到syn和ack 标志位均已设置为1 。表明该tcp 包是对第一步中tcp 包的确认,并同时请求同步,即ack-syn包。ack-syn包:tcp第三次握手:psh,ack-syn包:1 在你的监听记录中,syn报文段的序号值(逻辑值和原始值)是多少?第一次握手的时候syn报文段的序号的逻辑值是0

25、,原始值是0;第二次握手的时候syn报文段的序号的逻辑值是1,原始值是0;第三次握手的时候syn报文段的序号的逻辑值是1,原始值是1;2 tcp发送方如何根据接收方发送报文中的“窗口”值进行流量控制的?tcp使用滑动窗口协议如何进行流量控制发送端窗口大小取决于接收端窗口大小和网络能够传输窗口大小他们两者中的最小者。例如,发送端窗口为3,发送到接收端,接收端的接收窗口为5的话,接受数据,并且会给发送端一个ack(确认)告诉发送端我的窗口为5,发送端收到确认后会把自己的发送端窗口调整为5。这样就可以加速数据传输了。3 在你的监听记录中,是否出现分组丢失?tcp是如何进行重传的?监听记录中出现过分组

26、(包)的丢失。如果发送方设置的超时计时器时限已到但还没有收到确认,那么很可能是网络出现了拥塞,致使报文段在网络中的某处被丢弃。这时,tcp马上把拥塞窗口 cwnd 减小到1,并执行慢开始算法,同时把慢开始门限值ssthresh减半。这是不使用快重传的情况。快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。七、实验中遇到的问题由于谷歌网站服务器存在多个ip地址,如:46, 47, 48, 44,203

27、.208.46.145等。在wireshark中显示过滤器设置目的ip的时候,随机设置一个谷歌服务器的ip地址,过滤之后可能得不到结果。如截图:八、总结:(1)在tcp/ip协议中,tcp协议提供可靠的连接服务,采用三次握手建立一个连接(2)捕捉过滤器是数据经过的第一层过滤器,它用于控制捕捉数据的数量,以避免产生过大的日志文件。(3)显示过滤器是一种更为强大(复杂)的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。(4)可以使用6种比较运算符:英文写法:c语言写法:含义:eq= 等于ne != 不等于gt 大于lt = 大于等于le = 小于等于logical expressions(

28、逻辑运算符):英文写法:c语言写法:含义:and& 逻辑与or | 逻辑或xor 逻辑异或not ! 逻辑非被程序员们熟知的逻辑异或是一种排除性的或。当其被用在过滤器的两个条件之间时,只有当且仅当其中的一个条件满足时,这样的结果才会被显示在屏幕上。让我们举个例子:tcp.dstport 80 xor tcp.dstport 1025 只有当目的tcp端口为80或者来源于端口1025(但又不能同时满足这两点)时,这样的封包才会被显示。 福建农林大学计算机与信息学院实验报告系: 计算机科学与技术 专业: 计算机科学与技术 年级: 2009 姓名: 张文绮 学号: 091150022 实验课程: 网

29、络环境编程 实验室号_田c514_ 计算机号 22 实验时间: 4.27 指导教师签字: 林要华 成绩: 实验三 套接字编程-c/s模型通信一、实验目的1.理解客户机/服务器模型的工作机理。2.掌握套接字的概念。3.掌握基于套接字的面向连接客户机/服务器程序的设计原理,了解相关的winsock api函数。二、实验环境与设备本实验在实际因特网环境下进行操作,需要的设备有:一台pc机,vc+.net 5以上版本软件。三、实验原理1. 使用套接字通信示意图2. 面向连接的客户机/服务器程序工作模型四、实验内容1. 采用winsock api,设计与一个服务器程序和客户机程序。(1) 客户机应用程序

30、实验环境:调试环境:vc+.net 2010功 能:控制台命令状态运行的tcp通信客户程序,实现简单的数据传代码:(1)服务器应用程序实验环境:调试环境:vc+.net 2010功 能:控制台命令状态运行的tcp通信服务器程序,实现简单的数据传输功能代码:#include #include using namespace std;#include int main(int argc, char *argv)const int default_port = 5000; word wversionrequested;wsadata wsadata;int err,ilen;wversionrequ

31、ested=makeword( 2, 2 );err = wsastartup( wversionrequested, &wsadata );if ( err != 0 ) cout加载?winsock失败!?;return 0;/创建用?于监听y的?套接字?socket socksrv = socket(af_inet,sock_stream,0); /创建服t务?器监听y套接字?if (socksrv = invalid_socket)coutsocket() fail:wsagetlasterror()endl;return 0;sockaddr_in addrsrv;addrsrv.s

32、in_family = af_inet;addrsrv.sin_addr.s_un.s_addr = htonl(inaddr_any);/自?动分?配?地?址,?字?节顺3序转a换?addrsrv.sin_port = htons(default_port);/字?节顺3序转a换? /绑定本?地?主机ip和端?口err = bind(socksrv,(sockaddr*)&addrsrv,sizeof(sockaddr);if ( err != 0 ) coutbind() fail:wsagetlasterror()endl;return 0;/监听yerr = listen(socksr

33、v,5);if ( err != 0 ) coutlisten() fail:wsagetlasterror()endl;return 0;coutserver waiting.:endl;sockaddr_in addrclient;int len = sizeof(sockaddr);while(1)socket sockconn = accept(socksrv,(sockaddr*)&addrclient,&len);/接收?客户进?程连?接请?求if (sockconn = invalid_socket)coutaccept() fail:wsagetlasterror()endl;

34、break;char sendbuf1024,hostname100;if (gethostname(hostname,100) != 0) /获?取?主机名?称?strcpy(hostname,none);sprintf(sendbuf,welcome %s connected to %s!,inet_ntoa(addrclient.sin_addr),hostname);err = send(sockconn,sendbuf,strlen(sendbuf)+1,0); /发送数y据yif (err = socket_error)coutsend() fail:wsagetlasterror

35、()endl;break;char recvbuf1024 = 0;ilen = recv(sockconn,recvbuf,1024,0);/接收?数y据yif (ilen = socket_error)coutrecv() fail:wsagetlasterror()endl;break;recvbufilen = 0;coutrecvbufendl;closesocket(sockconn); /关?闭?套接字?closesocket(socksrv);/关?闭?服t务?器监听y套接字?wsacleanup();return 0;五、实验步骤1.具体实现可依据如下的流程图。具体步骤参考教

36、材的7.5节。客户机六、练习调试教材的代码实例7.3。代码为: #pragma comment(lib, ws2_32.lib )#include#includeusing namespace std;#includevoid main(int argc, char *argv)const int data_buffer_lenght=1024;const int default_port=5050;socket locatesocket;sockaddr_in locateaddr,remoteaddr;int locateport,remoteport;int err;int ilen,i

37、send,irecv;char apply_message=i am a client!n; char send_bufdata_buffer_lenght=0,recv_bufdata_buffer_lenght=0;bool clientflag=false;word wversionrequested;wsadata wsadata;if(argc4)coutserver waitingendl;if(argc2)locateport=default_port;elselocateport=atoi(argv1);elselocateport=atoi(argv1);remoteport

38、=atoi(argv3);remoteaddr.sin_family=af_inet;remoteaddr.sin_port=htons(remoteport);remoteaddr.sin_addr.s_un.s_addr=inet_addr(argv2);clientflag=true;wversionrequested=makeword(2,2);err=wsastartup(wversionrequested,&wsadata);if(err!=0)coutfailed to load winsock.n;return;locatesocket=socket(af_inet,sock_

39、dgram,0);if(locatesocket=invalid_socket)coutsocket()failed:getlasterror()endl;return;/设置?本?地?套接字?相关?参?数ylocateaddr.sin_addr.s_un.s_addr=htonl(inaddr_any);locateaddr.sin_family=af_inet;locateaddr.sin_port=htons(locateport);err=bind(locatesocket, (sockaddr*)&locateaddr, sizeof(sockaddr);if(err != 0)co

40、utbind() failed:getlasterror()endl;return;ilen = sizeof(remoteaddr);/客户机进?程首先发送数y据yif(clientflag)isend = sendto(locatesocket, apply_message, strlen(apply_message)+1, 0, (sockaddr *)&remoteaddr, sizeof(remoteaddr);if(isend = socket_error)coutsendto() failed:getlasterror() 0)coutmessage:send_bufhave s

41、end toinet_ntoa(remoteaddr.sin_addr):ntohs(remoteaddr.sin_port)endl;/循-环处|理双?方?数y据y传?输?while(1)irecv = recvfrom(locatesocket, recv_buf, data_buffer_lenght, 0, (sockaddr*)&remoteaddr, &ilen);if(irecv = socket_error)coutrecvfrom() failed:getlasterror() 0)coutreceive:recv_buffrom:inet_ntoa(remoteaddr.s

42、in_addr):ntohs(remoteaddr.sin_port)send_buf;isend = sendto(locatesocket, send_buf, strlen(send_buf)+1, 0, (sockaddr*)&remoteaddr, sizeof(remoteaddr);if(isend = socket_error)coutsendto() failed:getlasterror() 0)coutmessage:send_bufhave send to inet_ntoa(remoteaddr.sin_addr):ntohs(remoteaddr.sin_port)

43、endl;closesocket(locatesocket);wsacleanup(); 实验结果截图:七、 总结1、 通过本次套接字编程c/s模型通信实验,初步明白了一个套接字是通信的一端,在这一端上你可以找到与其对应的一个名字,一个正在被使用的套接字都有它的类型和与其相关的任务。2、 udp通信机制特点:1) 是一种无连接的c/s通信方式;2) 不保证所有包均会被对方接收;3) 不保证接收顺序与发送顺序相同。知道了socket通信机制 3、 2udp与tcp通信的区别 1) 客户机和服务器程序均要建立datagramsocket对象;2) 不会被动地等待建立一个连接的请求;3) 数据报本身

44、含有目标机器的ip地址、端口、数据内容。4、 c/s模式软件的运行过程1)在同一台机器上运行分别用jcreater打开客户端程序和服务器端程序,各占一个窗口;先运行服务器端程序,后运行客户端程序。2)在网络不同机器上运行先在机器a上运行服务器端程序;再在机器b上运行客户端程序,并在程序中修改好服务器的机器名或ip地址。福建农林大学计算机与信息学院实验报告系: 计算机科学与技术 专业: 计算机科学与技术 年级: 2009 姓名: 张文绮 学号: 091150022 实验课程: 网络环境编程 实验室号_田c514_ 计算机号 22 实验时间: 6.1 指导教师签字: 林要华 成绩: 实验四 基于w

45、insock 2的ip多播应用程序一、实验目的1.理解ip多播的基本原理。2.掌握网际组管理协议igmp。3.掌握基于winsock 2的多播应用程序设计方法。二、实验环境与设备本实验在实际因特网环境下进行操作,需要的设备有:一台pc机(windows 7系统),vc+.net 5以上版本软件。三、实验原理1. igmp操作n 加入多播组:主机和路由器都可以加入一个多播组。当某个主机中的一个进程申请加入一个多播组时,主机将发送一个成员关系报告报文到它所在的ip子网的多播路由器上;路由器接收到该申请后将检查它的群组成员关系表,看该主机是否已经在群组中。如果该主机不在群组关系表中(即第一次申请),

46、随即将自己的ip模块做相应的准备,以便开始接收来自该多播组传来的数据。如果这台主机是它所在的ip子网中第一台加入该多播组的主机,则多播路由器将通过路由信息的交换加入多播分布树n 退出多播组:当主机发现在一个特定的多播组中已经没有进程时,就发送退出报告。多播路由器收到退出报告后,并不立即删除这个群组,而是针对该群组发送查询报文。当在指定的时间内没有收到相关主机(和路由器)对该群组的成员关系报告时,就意味着在本网络上已经没有该群组成员,此时,多播路由器将删除该群组。否则继续保留该群组。n 查询成员关系:由于多播组中的成员关系是动态变化的,并且有些变化是由于异常事件而引起的,例如某个群组的某台成员主

47、机因异常而关机,此时多播路由器将永远接收不到其退出报告。为了实时掌握群组的成员组成,igmp提供了一种机制来监控其某个网络上的所有主机和路由器,以便确定群组和主机或路由器之间的关系。2. 支持多播的应用程序接口n 加入一个多播组; n 离开一个多播组; n 为调整范围对一个多播数据的ip 数据报中的ttl值进行设定; n 为多播传输和接收设定本地的接口; n 禁止输出多播数据回送。具体应用程序接口函数如下表。四、实验内容以winsock 2为基础。设计一个简单的多播应用程序,运行界面可以参照如下所示。其中包括绑定本地套接字、加入多播组、退出多播组、向多播阻发送数据等操作。五、实验步骤1. 初始

48、化winsock资源/初始化winsock 2资源,检查系统是否安装了winsock 2以上版本wversionrequested = makeword(2,2);err = wsastartup(wversionrequested, &wsadata);2. 创建套接字sock = wsasocket ( af_inet,sock_dgram,ipproto_udp, (lpwsaprotocol_info)null,0, wsa_flag_overlapped| wsa_flag_multipoint_c_leaf| wsa_flag_multipoint_d_leaf);bflag=tr

49、ue;err =setsockopt(sock,sol_socket,so_reuseaddr,(char*)&bflag,sizeof(bflag);local.sin_family = pf_inet;local.sin_port = htons(ushort) m_nport);local.sin_addr.s_addr = htonl(inaddr_any);err = bind(sock,(struct sockaddr far *)&local,sizeof(local);3. 设置多播数据报生存时间ttl/设置多播数据报传播范围(生存时间ttl)err = wsaioctl(so

50、ck,sio_multicast_scope,&m_nttl, sizeof(m_nttl),null,0,&cbret,null,null);4.设置多播返回/设置多播返回(lookback)err = wsaioctl(sock,sio_multipoint_loopback,&nloopback, sizeof(nloopback),null,0,&cbret,null,null);5. 加入/离开一个多播组remote.sin_family = pf_inet;remote.sin_addr.s_addr = inet_addr( (char *) m_ipaddress);remote.sin_por

温馨提示

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

评论

0/150

提交评论