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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

现代通信技术实验TCP通信实验.docx

1、现代通信技术实验TCP通信实验现代通信技术试验报告(二)TCP通信实验学院:计算机学院班级:24010107班学号:*姓名:*日期:2015.05.14TCP 通信实验一、【实验目的】 1. 掌握 TCP 网络的基本原理; 2. 掌握使用 Socket 进行 TCP 网络开发的基本方法。 二、【实验设备】 1. 装有 Linux 系统或装有 Linux 虚拟机的 PC 机一台; 2. 物联网多网技术综合教学开发设计平台一套; 3. 串口线一条或 USB 线(A-B)。 三、【实验要求】 编写程序在实验箱上实现一个 TCP 服务器,实现接收网络数据并将收到的网络数据发送给客户端 的功能。四、【实

2、验原理】 1. TCP/IP 协议 TCP/IP 协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通 信协议,这个协议是 Internet 国际互联网络的基础。 TCP/IP 是用于计算机通信的一组协议,我们通常称它为 TCP/IP 协议族。它是 70 年代中期美国国 防部为其 ARPANET 广域网开发的网络体系结构和协议标准,以它为基础组建的 INTERNET 是目前国 际上规模最大的计算机网络,正因为 INTERNET 的广泛使用,使得 TCP/IP 成了事实上的标准。 TCP/IP 是网络中使用的基本

3、的通信协议。虽然从名字上看 TCP/IP 包括两个协议,传输控制协议 (TCP)和网际协议(IP),但 TCP/IP 实际上是一组协议,它包括 TCP、IP、UDP、ICMP、RIP、TELNET、 FTP、SMTP、ARP、TFTP 等许多协议,这些协议一起称为 TCP/IP 协议。 TCP/IP 由四个层次组成:数据链路层、网络层、传输层、应用层,其分层模型及协议如表 1 所 示:表1-TCP/IP分层模型网络接口层(Network) 网络接口层是 TCP/IP 网络体系的最低层,负责通过网络发送 IP 数据报,或者从网络上接收物理帧, 抽出 IP 数据报,交给 IP 层。 网络层(Int

4、ernet) 网络层负责相邻计算机之间的通信。其功能包括三方面: 嵌入式网关实验 1) 处理来自传输层的分组发送请求,收到请求后,将分组装入 IP 数据报,填充报头,选择去往 信宿机的路径,然后将数据报发往适当的网络接口; 2) 处理输入 IP 数据报:首先检查其合法性,然后进行寻径假如该数据报已到达信宿机,则 去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报; 3) 处理路径、流控、拥塞等问题。 传输层(Transport) 传输层提供应用程序间的通信。其功能包括:1) 格式化信息流; 2) 提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如

5、分组丢失,必须 重新发送。 应用层(Application)) 应用层向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录使 用 TELNET 协议提供在网络其它主机上注册的接口。TELNET 会话提供了基于字符的虚拟终端。文件 传输访问 FTP 使用 FTP 协议来提供网络内机器间的文件拷贝功能。 2. TCP 协议简介 TCP(Transmission Control Protocol)协议是 TCP/IP 协议栈中的传输层协议,它通过序列确认以及 包重发机制,提供可靠的数据流发送和到应用程序的虚拟连接服务。与 IP 协议相结合,TCP 组成了因 特网协议的核心。

6、 由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的网络终端上的软件程 序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用 TCP 的“端口号” 完成的。网络 IP 地址和端口号结合成为唯一的标识,称为“套接口”或“端点”。TCP 在端点间建立连 接或虚拟电路进行可靠通信。 TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用等技术。TCP 通过面 向连接的、端到端的可靠数据报发送来保证可靠性。TCP 在字节上加上一个递进的确认序列号来告诉 接收者发送者期望收到的下一个字节。如果在规定时间内,没有收到关于这个包的确认响应,TCP 将 重

7、新发送此包。TCP 的可靠机制允许设备处理丢失、延时、重复及读错的包。超时机制允许设备监测 丢失包并请求重发。同时,TCP 提供了有效流控制。当向发送者返回确认响应时,接收 TCP 进程就会 说明它能接收并保证缓存不会发生溢出的最高序列号。 3. Linux 下的 Socket 编程Socket 是 TCP/IP 协议传输层所提供的接口(称为套接口),供用户编程访问网络资源,它是使用标 准 UNIX 文件描述符和其他程序通信的方式。Linux 的套接口通信模式与日常生活中的电话通信非常类 似,套接口代表通信线路中的端点,端点之间通过通信网络来相互联系。Socket 接口被广泛应用并成为 事实上

8、的工业标准。它是通过标准的 UNIX 文件描述符和其他程序通信的一个方法。按其应用,套接口 主要有以下两种分类: 流式套接口(Stream Socket) 数据报套接口(Datagram Socket) 流式套接口采用 TCP 协议通信,而数据报套接口采用 UDP 协议通信。 4. 本次实验实验原理:本实验需要实现一个 TCP 服务器,该服务器将一直监听某一端口,等待客户端发起的连接请求。 当客户端与实验箱的服务器端建立 TCP 连接后,客户端如果向服务器端发送数据,则服务器端收到数 据后会将数据重新发送给客户端。TCP 服务器的程序流程如图1所示。图1-TCP服务器程序流程图五、【实验步骤】

9、 1.按照实验原理的描述编写程序,并保存为.c后缀的源程序文件,文件名为:ex07_TCPEchoSever.c;2.准备设置PC 端的环境,准备工作包括:实验箱与 PC 的硬件连接、串口通信软 件设置、网络环境设置;(1)实验箱与 PC 的硬件连接:一般情况下,实验箱同时需要两种方式与 PC 建立连接:串口和以太网。首先使用标准 9 针串口线, 将实验仪的 UART0 与 PC 的串口相连;然后,使用实验箱附带的网线,将实验箱的以太网接口与 PC 的网卡直接相连,或者将实验箱与路由器相连。这样就完成了硬件连接,如图 2 所示。 图2-实验箱与PC的基本硬件连接(2)串口通信软件设置 在 PC

10、 端需要使用串口通信软件来对实验箱进行控制。通常情况下,使用 Windows 系统自带的“超 级终端”工具即可(或者用户也可以使用其他同类型的软件,这里仅针对“超级终端”做详细设置说明)。 首先在“开始”菜单中,找到“程序” “附件” “通讯” “超级终端”,如图 3所示。图3-打开超级终端1、设置超级终端名称,任意名称即可,如图 4:图4-设置连接名称2、选择串口COM1,如图5:图5-选择连接的串口3、设置串口属性,每秒位数设置为 115200,数据流控制选择无,如图6:图6-设置所选的串口的属性4、将物联网多网设计平台的电源打开,A8 实验仪的拨动开关拨至“ON”,并按下实验仪上的“Po

11、wer”键,可以在超级终端中看到图 7 所示的启动提示信息:图7-U-boot启动界面5、待系统正常启动之后,可以看到“SAPP210.XXXX login:”的提示,等待用户登录,如图 8 所示: 图8-Linux启动完成6、按下 Enter 键,进入登陆,输入用户名“root”,密码“111111”,成功登录到系统:图9-登陆到linux成功(3)、网络环境设置 使用手动配置实验仪 IP 地址的方法必须设置电脑为静态 IP:点击打开网上邻居的属性,查看本地连接的属性,点击查看“Internet协议(TCP/IP)”的属性:图10-查看“Internet协议(TCP/IP)”在弹出的“Int

12、ernet 协议 (TCP/IP) 属性”对话框中,按照如图 11 设置 IP,单击“确定”按钮, 为电脑设置好静态 IP :192.168.87.1,如图11:图11-设置电脑的静态IP(4)配置实验仪 IP 地址 在超级终端中,执行命令“ipconfig eth0 -i 192.168.87.130 -m 255.255.255.0 -g 192.168.87.1”,为实验箱手动配置 IP 地址,如图 12所示:图12-手动配置实验箱的IP地址设置完成后,需要执行“service network restart”命令重启网络服务,使设置生效,如图 13所 示。需要注意的是,实验箱的 IP

13、地址需要设置为与电脑同一个网段:图13-重启网络服务查看当前实验箱的IP地址为,执行命令“ifconfig eth0”,查看结果如图14:图14-查看实验箱当前IP地址3.在 Ubuntu 的环境下,编译嵌入式C程序,打开Ubuntu终端工具,输入编译命令“arm-linux-gcc -0 ex07TCPEchoSever ex07_TCPEchoSever.c”,编译实验程序,如图15:图15-Ubuntu编译目标程序查看编译结果,生成新的文件:ex07_TCPEchoServer 文件;将编译好的可执行程序文件从 Ubuntu 中复制到 Windows 系统,然后打开“我的电脑”,在地 址

14、栏中输入“ftp:/192.168.87.1”,并将上面生成的ex07_TCPEchoServer 文件拷贝到该目录下, 如图 16 所示:图16-拷贝执行文件到对应目录4、为执行文件增加权限并执行该文件如图17:图17-增加权限并执行5、在 PC 的 windows 环境下, 开始-运行,输入 cmd 回车后,进入到命令行模式,输入“telnet 192.168.87.130 8000”命令,TCP 访问实验箱运行的 ex07_TCPEchoServer 运行程序,如图 18 所 示: 图18-远程 telnet 访问实验箱 8000 端口的 TCP 服务器 6、在 telnet 客户端内输

15、入字符具体现象如图19所示: 图19-TCP 实验运行结果 六、【实验中的问题小结及实验总结】问题:(1)、在设置电脑的静态IP的过程中,出现本地连接internet协议属性打不开的情况,后来关掉实验室教学管理系统,就正常了;(2)、在Ubuntu下终端工具输入编译命令,编译嵌入式源文件时提示不存在该文件,后来发现是因为没有进入到源文件所在的目录下面,使用cd 命令进入之后,编译命令可以正常执行。(3)在设置实验箱的IP地址时,第一次设置失败,后来改变了后几位主机号部分,避免了与网络中其他实验箱的IP重合;(4)在执行命令telnet访问TCP服务时出现失败的情况,后来发现是windows的t

16、elnet功能没有开启,开启之后运行正常。总结:通过本次TCP通信实验的完成,了解了TCP网络的基本原理,和使用Socket 进行 TCP 网络开发的基本方法;对于Ubuntu系统有了一定的了解,掌握了对于使用Ubuntu编译执行嵌入式c程序的方法;通过实验的完成,也对于嵌入式开发环境的搭建有了一定了解,掌握了搭建开发环境的基本步骤和配置方法等;七、【源程序】#include #include #include #include #include #include static unsigned short port = 8000; /定义端口号为8000int main(int argc,

17、char *argv) char *recvBuffer = (char *)malloc(4002); /非配数据接收内存 int recvLen; int listenfd, connfd; struct sockaddr_in serverAddr, clientAddr; int clientAddrSize; printf(TCP Echo Server Startedn); / Create a TCP socket connection listenfd = socket(AF_INET, SOCK_STREAM, 0); /将套接口由主动转为被动 if(listenfd = -

18、1) printf(Invalid socketn); exit(1); /socket地址赋值 bzero(&serverAddr, sizeof(serverAddr); serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); printf(Binding server socket to port %dn, port); /为本地协议地址绑定socket端口 if(bind(listenfd, (struct so

19、ckaddr*)&serverAddr, sizeof(struct sockaddr) = -1) printf(Bad bindn); exit(1); if(listen(listenfd, 1) = -1) / Allow 1 queued requests printf(Bad listenn); exit(1); printf(Accepting connections(Max 1 connections).n); for(;) clientAddrSize = sizeof(struct sockaddr_in); /阻塞等待客户端的连接 connfd = accept(listenfd, (struct sockaddr *)&clientAddr, &clientAddrSize); if(connfd = -1) printf(Bad acceptn); exit(1); /接收PC机发来的数据并发送回去 while(recvLen = recv(connfd, recvBuffer, 4000, 0) 0) send(connfd, recvBuffer, recvLen, 0); printf(Connection closed.n); close(connfd); return 0;

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

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