[工学]TCP、IP网络环境编程实验报告1-4.doc

上传人:音乐台 文档编号:1976699 上传时间:2019-01-27 格式:DOC 页数:33 大小:2.85MB
返回 下载 相关 举报
[工学]TCP、IP网络环境编程实验报告1-4.doc_第1页
第1页 / 共33页
[工学]TCP、IP网络环境编程实验报告1-4.doc_第2页
第2页 / 共33页
[工学]TCP、IP网络环境编程实验报告1-4.doc_第3页
第3页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[工学]TCP、IP网络环境编程实验报告1-4.doc》由会员分享,可在线阅读,更多相关《[工学]TCP、IP网络环境编程实验报告1-4.doc(33页珍藏版)》请在三一文库上搜索。

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监听软件可从网址:http:/www.wireshark.org/下载。三、实验原理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原理,可以访问: http:/ 成为IP地址, 但是在网络中数据传输是以帧的形式进行传输,而帧中有目标主机的MAC地址,(MAC地址即硬件地址,每台主机上都有唯一的一个地址),本地主机在向目标主机发送帧前,将目标主机IP地址解析成为MAC地址,这就是通过APR协议来完成的。首先,我们假设有两台主机A,B在互相通信,假设A(192.168.1.2),B(192.168.1.4)双方都知道对方的IP地址,如果A主机要向B主机发送“hello”,那么A主机(当然如果在A主机中已经缓存有B主机的

6、MAC地址(硬件地址)那么就不用再去进行下面的查找了),首先要在网络上发送广播(一般都是在同一个网段内进行的),广播信息类似于“192.168.1.4的MAC地址(硬件地址)是什么”,如果B主机听见了,那么B主机就会发送“192.168.1.4的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地址:发送端的协议地址(IP

8、地址),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(192.168.221.1/24)我是用物理机做,主机B(192.168.221.2/24)我用虚拟机做。A和B在互相通信:在主机A上ping主机B的IP(192.168.221.2):在主机B上ping主机A的IP(192.168.221.1):主机A和主机B可以互相通信。主机A(192.168.221.1),B(192.168.221.2),双方都知道对方的IP地址,如果A主机要向B主机发送“hello”,那么A主机(当然如果在A主机中已经缓存有B主机的MAC地

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

14、帧:(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地址:192.168.221.2(B主机) 目的MAC地址:00:00:00:00:00:00 目的IP地址:192.168.221.1(A主机)Wireshark网络协议分析工具捕捉到完整的ARP请求帧:七、思考1.许多系统管理员都不允许用户在共享网络上运行监听软件,你认为这是为什么?调查一下你经常使用的网络的管理策略,能找到允许进行监听的网络吗?解答:

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

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

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

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

20、会把一系列重复确认的分组当作是数据丢失的先兆。四、实验内容 用WireShark捕获建立TCP连接的3次握手过程的数据帧,并对其进行分析。五、实验步骤(参考http:/ 表明74.125.153.99为谷歌网站的IP地址。然后,注意包头详细信息窗口,可以看到当前选中的网络包的序列号(sequence number)为0,标志(flags)位SYN被设置为1,即为主机向谷歌网站发起建立连接请求的SYN包。3接下来,为TCP三次握手的第二步,源IP地址为192.168.1.101,目的IP地址为74.125.153.99。然后,将注意力转向包头详细信息子窗口,可以看到序列号为:0;确认号为:1,即

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

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

23、5.209发送请求,同步位置为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,原始值是0;第二次握手的时候SYN报文段的序号的逻辑值

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

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

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

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

28、时间: 4.27 指导教师签字: 林要华 成绩: 实验三 套接字编程-C/S模型通信一、实验目的1.理解客户机/服务器模型的工作机理。2.掌握套接字的概念。3.掌握基于套接字的面向连接客户机/服务器程序的设计原理,了解相关的WinSock API函数。二、实验环境与设备本实验在实际因特网环境下进行操作,需要的设备有:一台PC机,VC+.NET 5以上版本软件。三、实验原理1. 使用套接字通信示意图2. 面向连接的客户机/服务器程序工作模型四、实验内容1. 采用winsock API,设计与一个服务器程序和客户机程序。(1) 客户机应用程序实验环境:调试环境:VC+.NET 2010功 能:控制

29、台命令状态运行的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;wVersionRequested=MAKEWORD( 2, 2 );err =

30、 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.sin_family = AF_INET;addrSrv.

31、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(sockSrv,5);if ( err != 0 ) coutlis

32、ten() 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;break;char sendBuf1024,hostn

33、ame100;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()endl;break;char recvBuf102

34、4 = 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.具体实现可依据如下的流程图。具体步骤参考教材的7.5节。客户机六、练习调试教材的代码实例7.3。代

35、码为: #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,iSend,iRecv;char apply_Messag

36、e=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=atoi(argv3);remoteAddr.sin_

37、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_DGRAM,0);if(locatesocket=INV

38、ALID_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)coutbind() Failed:GetLastError

39、()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 send 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.sin_addr)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1