当前位置:首页 >> 信息与通信 >>

数据通信原理


《数据通信原理》 课程实验指导书 (Experiments for Data Communication)

2005 年 12 月





本课程实验内容由三个上机实验组成:循环码的编码实验、基于 socket 的数据 通信实验、采用 TCP 的 Client/Server 模式的数据通信实验

。 1

循环码的编码实验:2 实验学时,主要目的是基本掌握一种数据通信编码的纠错 检错方法。基于 socket 的数据通信实验:4 实验学时;采用 TCP 的 Client/Server 模式的数据通信实验:4 实验学时;这两个实验主要是培养学生在网络环境下的数据 通信程序的开发能力,加深对本门课程的学习理解。





《数据通信原理》是网络工程专业本科生必修的一门专业基础课程。通过本课程 2

的学习使学生对数据通信获得较完整的概念,并掌握数据通信的基本理论,为以后学 习相关网络课程打下必备的基础,为从事数据通信和计算机网络工作提供一定的技术 支持。数据通信主要包括数据传输、数据交换和数据通信网以及相关的通信协议。 《数据通信原理》也是一门实践性较强的课程,为了理论联系实际,安排了三个 实验, 实验内容基本突出了 《数据通信原理》 的重点部分。 从而能帮助学生加深对 《数 据通信原理》学习和理解。 为帮助学生熟悉掌握《数据通信原理》的基本理论与技术知识。特编写本课程实 验指导书,由于水平有限,错误和不妥之处在所难免,恳请各位批评指正。

3

实验一

循环码的编码实验

一、目的和要求 1、实验目的 基本掌握循环码的编码过程及用程序实现的方法。 2、实验学时:2 学时 3、实验要求 (1)熟悉循环码的编码方法、译码方法。 (2)选取一个生成多项式,采用 C/C++编写循环码的编码程序。 (3)上机调试通过,并用相关代码测试。 二、实验内容 国际上推荐使用的循环码生成多项式有以下三种: CRC-12=x12 + x11 + x3+ x2+ x+ 1 CRC-16=x16+ x15+ x2+ 1 CRC-CTU-T=x16+ x12+ x3+ 1
选取其中一种,采用 C/C++语言设计出一个通用的循环码生成程序,并上机调试通过。并用 设计的程序为下列代码生成循环码: 1、1100110100010101 2、10001100111011110001001000110110

三、仪器、设备和材料 1、PC 微机 2、DOS 操作系统或 Windows 操作系统 3、Turbo C 程序集成开发环境或 Visual C++ 程序集成开发环境 四、实验原理 循环码是一种线性码,是在严格的代数学理论基础上建立起来的,具有较强的检 错纠错能力。在循环码中一般用码多项式表示码组,也就是把码组中各码元当作一个 多项式的系数。 一个长度为 n 的循环码(n,k)的每一个多项式,它必定是按模(xn+1)运算的 一个余式。在(n,k)循环码中,存在一个 n-k=r 次的码多项式 g(x)——生成多项 式。 (n,k)循环码的编码可按下列步骤进行: 1、选择生成多项式 g(x) ; 2、将待编码的信息多项式 M(x)乘以 xn-k ; 3、用 g(x)去除 xr M(x) ,得到商式 Q(x)和余式 r(x) ; 4、以 r(x)作为监督多项式附加在 xr M(x)之后,得到所需的码组。 1

五、实验步骤 1、根据要求选取生成多项式; 2、采用 C/C++语言,设计循环码生成函数; 3、编制测试程序(主函数 main) 。 4、调试程序:输入一组编码,检查输出结果。 六、实验注意事项 1、实验报告应包括以下几个部分: (1)循环码的生成原理、生成步骤; (2)循环码编码的实现算法。 2、测试数据: 测试下列码组:
1100110100010101,10001100111011110001001000110110

3、思考题: (1)循环码在数据通信中如何检错? (2)循环码在数据通信中如何纠错?

2

实验二、 基于 socket 的数据通信实验
一、 目的和要求
1、实验目的 熟悉socket命令,掌握socket编程技术。 2、实验学时:4学时 3、实验要求 在Windows平台或UNIX平台上,有C/C++编程实现。 二、实验内容 在计算机互联网络环境实现数据通信。 三、仪器、设备和材料 1、PC 微机; 2、UNIX 操作系统或 Windows 操作系统; 3、Turbo C 程序集成开发环境或 Visual C++ 程序集成开发环境; 4、计算机互联网络环境。 四、实验原理 下面是一个简单的客户机/服务器程序的实现,它用套接字接口在 TCP 连接上发 送消息。这个程序是在 UNIX 平台上完成的,用到了其他的一些 UNIX 功能,希望在参 考时注意。在这个实例中允许用户在一端的计算机上输入文本数据并将其发送给另一 端计算机用户。 1.客户端编程 从客户端向服务器端传送数据的步骤为:采用远端的计算机机名作为参数,通过 调用 UNIX 程序 gethostbyname 把远端计算机名转化为对应的 IP 地址,再构造套接字 接口所需的地址数据结构(sin) ,这个数据结构表明整个过程将一直采用套接字与网 络(AF_INET)相连接。采用 TCP 端口号 5432 作为共知的服务器端口号。最后一步是 调用 socket 和 connect。 当 connect 正确返回时,表明客户端到服务器的连接已建立 起来,客户端程序就可以从标准输入设备读取文本数据并通过套接字发送给远端的服 务器。 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define SERVER_PORT 5432 #define MAX_LINE 256 int main(int argc,char * argv[]) { FILE *fp; struct hostent *hp; 3

struct sockaddr_in sin; char *host; char buf[MAX_LINE]; int s; int len; if(argc==2){ host=argv[1]; } else { fprintf(stderr,”usage:simplex-talk host\n”); exit(1); } /* 将主机名翻译成对等实体的 IP 地址 */ hp=gethostbyname(host); if(!hp) { fprintf(stderr,”simplex-talk:unknown host:%s\n”,host); exit(1); } /* 建立地址数据结构 */ bzero((char *)&sin,sizeof(sin)); sin.sin_family=AF_INET; bcopy(hp->h_addr,(char *)&sin.sin_addr,hp->h_length); sin.sin_port=htons(SERVER_PORT); /* 主动打开 */ if((s=socket(PF_INET,SOCK_STREAM,0))<0) { perror(“simplex-talk:socket”); exit(1); } if(connect(s, (struct sockaddr *)&sin,sizeof(sin)) <0 perror(“simplex-talk:connect”); close(s); exit(1); } /* 主循环:获得并发送文本行 */ while(fgets(buf,sizeof(buf),stdin)){ buf[MAX_LINE-1]=’\0’; len=strlen(buf)+1; send(s,buf,len,0); } 4

) {

} 2.服务器端编程 在服务器上填上自己的端口号(SERVER_PORT)构造地址数据结构。 服务器端不要指 明 IP 地址,这样应用程序可以接受来自本地网内任一 IP 地址的连接请求。然后,服 务器建立一个套接字,将它绑定到本地地址,设置允许同时连接的最大客户机数。在 完成了这些过程后,服务器就等待远端主机连接请求,当远端有客户机试图与之连接 时,它就接收并输出连接上送来的字符。 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define SERVER_PORT 5432 #define MAX_PENDING 5 #define MAX_LINE 256 int main() { struct sockaddr_in sin; char buf[MAX_LINE]; int len; int s,new_s; /* 建立地址数据结构 */ bzero((char *)&sin,sizeof(sin)); sin.sin_family=AF_INET; sin.sin_addr.s_addr=INADDR_ANY; sin.sin_port=htons(SERVER_PORT); /* 建立被动连接 */ if((s=socket(PF_INET,SOCK_STREAM,0))<0) { perror(“simplex-talk:socket”); exit(1); } if((bind(s,(struct sockaddr *)&sin,sizeof(sin)))<0) { perror(“simplex-talk:bind”); exit(1); } listen(s,MAX_PENDING); /* 等待连接,然后接收并输出文本 */ while(1) { if((new_s=accept(s,(struct sockaddr *)&sin,&len))<0) { 5

perror(“simplex-talk:accept”); exit(1); } while(len=recv(new_s,buf,sizeof(buf),0)) fputs(buf,stdout); close(new_s); } } 五、实验步骤 1、根据要求编写好客户机与服务器端程序; 2、调试客户器端程序; 3、调试服务器端程序; 4、作数据传输测试。 六、实验注意事项 1、实验报告应包括以下几个部分: (1)说明 SOCKET 的用法; (2)画出客户端、服务器端的工作流程图; (3)说明数据通信的过程。 2、思考题: (1)如何保证数据通信的安全性?

实验三、 采用 TCP 的 Client/Server 模式的数据通信实验 一、目的和要求
1、实验目的 掌握 TCP Client/Server 模式的数据通信原理、方法。 2、实验学时:4学时 3、实验要求 在Windows平台或UNIX平台上,有C/C++编程实现。 二、实验内容 采用TCP协议在客户端/服务器模式下实现数据通信。 三、仪器、设备和材料 1、PC 微机; 2、UNIX 操作系统或 Windows 操作系统; 3、Turbo C++ 程序集成开发环境或 Visual C++ 程序集成开发环境; 4、计算机互联网络环境。 6

四、实验原理 传输控制协议(Transport Control Protocol)是一种面向连接的,可靠的传输层协 议。面向连接是指一次正常的 TCP 传输需要通过在 TCP 客户端和 TCP 服务器端建立 特定的虚电路连接来完成,该过程通常被称为“三次握手” 。可靠性可以通过多种方 法来提供保证, 在这里关心的是数据序列和确认。TCP 通过数据分段(Segment)中的序 列号保证所有传输的数据可以在远端按照正常的次序进行重组,而且通过确认保证数 据传输的完整性。要通过 TCP 传输数据,必须在两端主机之间建立连接。TCP 客户 端需要和 TCP 服务器端建立连接,过程示例如下:

TCP Client 1 Send SYN (seq=w) 2 SYN/ACK

Flags

TCP Server

----SYN--->

SYN Received

<---SYN/ACK---Received

Send SYN (seq=x), ACK (w+1) ACK Received, Connection

3 Send ACK (x+1)

----ACK---> Established

w: ISN (Initial Sequence Number) of the Client x: ISN of the Server 7

在第一步中,客户端向服务器端提出连接请求。这时 TCP SYN 标志置位。客户端 告诉服务器端序列号区域合法,需要检查。客户端在 TCP 报头的序列号区中插入自己 的 ISN。服务器端收到该 TCP 分段后,在第二步以自己的 ISN 回应(SYN 标志置位), 同时确认收到客户端的第一个 TCP 分段(ACK 标志置位)。在第三步中,客户端确认收 到服务器端的 ISN(ACK 标志置位)。到此为止就已建立起完整的 TCP 连接,可以开始 全双工模式的数据传输过程。 根据以上内容编写一个 TCP Client/Server 模式的通信程序。通信程序由两个部 分组成,它包括客户端程序和服务器端程序。服务器端的建立步骤如下: socket-->bind-->listen-->accept 客户端的建立步骤如下: socket-->connect。 五、实验步骤 (1)编写TCP Client/Server模式的通信程序; (2)调试并运行自己编写的实现程序; 六、实验注意事项 1、实验报告应包括以下几个部分: (1)说明 TCP 传输控制协议的用法; (2)画出数据的工作流程图; (3)说明数据通信的过程。 2、思考题: (1)了解UDP Client/Server模式的工作原理,与TCP比较二者的不同在哪?

8


相关文章:
数据通信,数据通信原理是什么
数据通信,数据通信原理是什么_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档数据通信,数据通信原理是什么_计算机软件及应用_IT/计算机_...
数据通信原理
数据通信原理》 课程实验指导书 (Experiments for Data Communication) 2005 年 12 月 摘 要 本课程实验内容由三个上机实验组成:循环码的编码实验、基于 socket...
数据通信原理(最终版)
2011-2012 数据通信原理 1)数据通讯:依照通信协议,利用数据传输技术在两个功能单元之间 两个功能单元之间传递数据 两个功能单元之间 信息,他可以实现:计算机与计算机...
数据通信原理综合练习题(完整版)
数据通信原理综合练习题(完整版)_语文_初中教育_教育专区。北邮网络教育学院北京邮电大学网络教育学院(业余教育)2014 年春季学期 《数据通信原理》综合练习题与答案第...
数据通信原理总复习
数据通信原理总复习 隐藏>> 总复习 第 1 章 绪论 1、数据通信、通信协议的概念。 数据通信:依照通信协议,利用数据传输技术在两个功能单元之间来传递数据通信信息...
数据通信原理
数据通信原理_工学_高等教育_教育专区。第一章:绪论: 1、了解消息、信号、信息、数据的基本概念 (1)消息定义:是指通信过程中传输的具体原始对象。 消息的分类:...
数据通信原理试卷A
午 考场座号 日 试卷类型月装 2011——2012 学年 第一 学期课程名称: 课程名称: 数据通信原理一 二三 □A 卷 年 考试形式: 闭卷)考核方式: 考试) ( ...
数据通信原理习题集答案
数据通信原理习题集答案_信息与通信_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 数据通信原理习题集答案_信息与通信_工程科技_专业资料。通信行业学生...
数据通信原理
福建农林大学计算机与信息学院 信息工程类 实验报告课程名称: 姓名: 系: 专年学业: 级: 号: 薛岚燕 讲师 电子信息工程 电子信息工程 2010 级 数据通信原理 指导...
数据通信原理
哈尔滨工程大学数据通信原理结课大作业 GSM 与 CDMA 2013.4.20 目录 第1章 GSM... 2 1.1 简介 ......
更多相关标签:
数据通信 | 数据通信原理 pdf | 数据通信原理课后答案 | 数据通信基础 | 通信原理 | 数据通信原理与技术 | 数据通信技术 | 数据通信原理第三版 |