计算机网络课设

时间:2019-05-14 04:18:02下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《计算机网络课设》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《计算机网络课设》。

第一篇:计算机网络课设

计算机网络应用课程设计

报告

系(院):

计算机科学学院 专业班级: 计科11511 姓

名: 钟灿均 学

号: 201503687 指导教师: 余绍文 设计时间: 2017.6.12-2017.6.23 设计地点: 12教1楼机房

一、课程设计目的和意义

计算机网络课程设计的目的,是为了让我们更深入地掌握计算机网络的核心内容,实现理论与实践相结合。让学生用具体的实践成果,体现对理论知识的掌握程度。有利于学生提高计算机网络的实践能力,加深对计算机网络理论知识的理解。其基本目的是:

1. 培养学生理论联系实际的设计思想,训练综合运用所学的基础理论知识,结合生产实际分析和解决网络应用中问题的能力,从而使基础理论知识得到巩固和加深。2. 学习掌握网络应用工程的一般设计过程和方法。

二、设计题目和要求

1.编写程序,实现系统的基本功能;

2.要有用户界面:要求至少采用文本菜单界面;鼓励采用图形菜单界面; 3.写课程设计报告,内容包括:  封面(参见附录I)

 需求分析:以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?给出功能模块图和流程图。同时明确规定:输入的形式和输出值的范围;输出的形式;程序所能够达到的功能;测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。 概要设计:包括程序设计组成框图,程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。

 详细设计:包括模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等),每个模块的算法设计说明(可以是描述算法的流程图)。其中源程序要按照写程序的规则来编写,结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 运行结果:包括典型的界面、输入和输出数据等;

 总结:包括课程设计中遇到的问题,解决问题的过程及体会、收获、对课程设计的认识与思考等。

 附录:包括主要程序清单,要有适当的注释,使程序容易阅读。 开发环境:windows 10

 开发工具: vs2008

题目3:基于UDP协议的简易聊天机器人

设计目标:

1.了解Socket通信的原理,在此基础上编写一个聊天程序; 2.理解upd原理;课程设计系统组成及模块功能: 此课程设计实现了基于UDP的客户/服务器通信程序,需要实现以下一些基本功能: 1.客户端连接聊天机器人服务器;

2.消息发送:客户端发送消息给机器人服务器。

3.消息接收:客户端接收到机器人服务器发送给他的消息。4.可以有多个客户端同时连接

5.智能回复功能:根据用户发送的消息内容,稍微有点智能回复。

运行效果:

服务器端和客户端截图

三、设计内容

1、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。

2、UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。

3、UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据。

4、UDP传送数据较TCP快速,系统开销也少。

5、由于缺乏拥塞控制(congestion control),需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中增加主机拥塞控制来减小这个潜在的问题。

从以上UDP协议特点可知,UDP提供的是无连接的、不可靠的数据传送方式,是一种尽力而为的数据交付服务。

1.服务端

1.2.3.4.5.加载协议栈; 创建套接字;

将套接字绑定到一个本地地址和端口bind; 等待接收数据recvfrom;关闭套接字;

2.客户端

1.2.3.4.加载协议栈;

创建套接字socket;

向服务器发送数据sendto;关闭套接字; 3.相关代码显示:(客户端)

int main(int argc, char* argv[]){

system(“@color 0e”);WORD socketVersion = MAKEWORD(2, 2);WSADATA wsaData;if(WSAStartup(socketVersion, &wsaData)!= 0){ } sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);sin.sin_addr.S_un.S_addr = inet_addr(m);int len = sizeof(sin);return 0;以上代码为相关版本信息及热启动的一些操作;;

结构体端口号及相关地址信息以及转化函数,将输入的信息转化为计算机可识别的二进制代码,进行相关构造

char * sendData = new char[255];cout << “主人:”;cin >> sendData;while(strcmp(sendData, “#”)!= 0){

sendto(sclient, sendData, strlen(sendData), 0,(sockaddr *)&sin, len);char recvData[255];int ret = recvfrom(sclient, recvData, 255, 0,(sockaddr *)&sin, &len);if(ret > 0){

} recvData[ret] = 0x00;cout << “机器人:”;printf(recvData);4.相关代码展示:(服务端)

SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if(serSocket == INVALID_SOCKET){

} printf(“socket error!”);return 0;3

if(bind(serSocket,(sockaddr *)&serAddr, sizeof(serAddr))== SOCKET_ERROR){

} sockaddr_in remoteAddr;int nAddrLen = sizeof(remoteAddr);char * sendData = new char[255];char recvData[255];while(true){

int ret = recvfrom(serSocket, recvData, 255, 0,(sockaddr *)&remoteAddr, //printf(recvData);if(ret > 0){

} struct Ro { char recv[255];char send[255];recvData[ret] = 0x00;printf(“接受到一个连接:%s rn”, inet_ntoa(remoteAddr.sin_addr));cout << “主人:”;printf(recvData);printf(“bind error!”);closesocket(serSocket);return 0;以上为对套接字的绑定及判断绑定是否成功,以及对于相关信息的初始化

&nAddrLen);}Ro;FILE *fp;fp = fopen(“G:机器人问答机制.txt”, “r”);while(!feof(fp)){

} fscanf(fp, “%s %s”, Ro.recv, Ro.send);if(strcmp(recvData, Ro.recv)== 0){

} else { } strcpy(sendData, Ro.send);break;strcpy(sendData, “对不起,我不知道”);4

fclose(fp);cout << endl;cout << “机器人:” << sendData << endl;sendto(serSocket, sendData, strlen(sendData), 0,(sockaddr *)&remoteAddr, nAddrLen);

四、设计成果以及心得 1.成果

2.心得

通过对课设的相关的操作,加强了对于相关知识的理解,对于知识的应用也得以加强,在课设过程中,聊天机器人制作较为有趣,对于TCP与UDP的通信方式有了进一步的理解和加强,对于socket编程的相关基础也得以进一步的理解和学习。在今后的学习过程中希望可以将所学知识应用于实际,学以致用。而且对于课设中存在的问题和不足,以及通过老师的讲解,对一些算法加以分析和改进,从而不断完善课设内容,对内容的理解得以加深。

指导老师意见:

成绩:

教师签名: 2017年6月23日

第二篇:C1 CRC12计算机网络课设

计算机通信网络课程设计

C1 CRC-12 校验通信软件设计

所在学院: 信息科学与工程学院

专业班级: 通信工程

学生姓名:

学生学号:

指导教师: 时 间: 2015年9月20

引言:

循环冗余码 CRC 检验技术广泛应用于测控及通信领域,CRC计算可以靠专用的硬件来实现,但是对于低成本的微控制器系统,在没有硬件支持下实现CRC检验,关键的问题就是如何通过软件来完成CRC计算,也就是CRC算法的问题。CRC码是数据通信领域中最常用的一种差错检验码,其特征是信息字段和校验字段的长度可以任意选定。

实验设计要求:

C1.CRC-12 校验通信软件设计

环境要求:Windows/XP/7;C;信息交换内容为键盘输入的字符串;通信传输通过共享文件实现

编码要求:用模2 除法计算CRC 码,生成多项式为CRC-12

功能要求:能在两台计算机机上运行程序,一台产生CRC 码,另一台校验。

课程设计目标:

用C语言设计课程程序,完成用模2出发计算CRC码的CRC校验软件设计,1.掌握CRC码的计算方法;

2.掌握用C语言计算CRC码的算法;

3.熟练并掌握C语言在通信网络中的编程实现方式及功能。

CRC 简介

CRC 校验的基本思想是利用线性编码理论,在发送端根据要传送的 k 位二进制码序 列,以一定的规则产生一个校验用的监督码(既 CRC 码)r 位,并附在信息后边,构成 一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息码和 CRC 码之间所遵循的规则进行检验,以确定传送中是否出错。

12位的 CRC 码产生的规则是先将要发送的二进制序列数左移 12 位(既乘以2)后,再除以一个多项式,最后所得到的余数既是 CRC 码,如式(2-1)式所示,其中 B(X)表示 n 位的二进制序列数,G(X)为多项式,Q(X)为整数,R(X)是余数(既 CRC 码)。

12B(x)212R(x)(2-1)Q(x)G(x)G(x)求CRC码所采用模 2 加减运算法则,既是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。生成CRC码的多项式如下,CRC-12 则产生的是 12 位的CRC码。CRC-12:G(x)xxxxx1

接收方将接收到的二进制序列数(包括信息码和 CRC 码)除以多项式,如果余数为0,则说明传输中无错误发生,否则说明传输有误,关于其原理这里不再多述。用软件计算 CRC 码时,接收方可以将接收到的信息码求 CRC 码,比较结果和接收到的 CRC 码是否相同。

CRC原理:

CRC码为循环冗余校验码,基本表示方式为(n,k),其中n为数据位数,k为校验码位数。CRC码校验的基本思想是利用线性编码理论,在发送端根据要传送的(n,k)位二进制码序列,121132以一定的规则产生一个校验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。采用CRC校验时,发送方和接收方用同一个生成多项式g(x),并且g(x)的首位和最后一位的系数必须为1。CRC的处理方法是:发送方以g(x)去除t(x),得到余数作为CRC校验码。校验时,以计算的校正结果是否为0为据,判断数据帧是否出错。CRC校验可以100%地检测出所有奇数个随机错误和长度小于等于k(k为g(x)的阶数)的突发错误。所以CRC的生成多项式的阶数越高,那么误判的概率就越小。

程序流程图:

CRC-12校验方法:

多项式是0x180D,有13位,crc12本来是12位,16进制的0x80D前面补了个1,所以就是13位的。然后我们的信息是一串字符,每个字符8个位二进制,假如我们有3个字符,总共有24位。所以我们的运算就是先获取前面13位,这里的前13位二进制是指第一位是1的13位二进制。这个前13位和0x180D异或后,得到了一个异或结果,这个结果除去前面的0,应该是小于13位的。这时是不够13位的,所以我们可以在继续往后加二进制,假如3个字符,那么总共有24位进制,我们还有14到24位这些还没有加。

直到最后所有位都已经处理好了,得到的结果就是crc码。

文件共享: 将计算的数据存入共享的文件夹中,所以我们必须要先建立一个codecode的文件夹,并设为共享,将要共享的数据存在code.txt文件里。

fp_crc=fopen(“D:codecodecode.txt”,“w”);

//打开文件夹 fprintf(fp_crc,“%d ”,len+2);

//存入数据+crc的长度 for(int i=0;i

fprintf(fp_crc,“%c”,ch[i]);

//存入字符串 } fprintf(fp_crc,“%c”,(crcnum>>4));

//先去12位crc码的前8位

fprintf(fp_crc,“%c”,(crcnum<<4)&0xF0);//再取crc码的后4位,然后剩下的补0,使其够8位fclose(fp_crc);

//最后存入文档中

另一台计算机从计算机中的共享文件夹读取数据,读出后数据进行CRC-12校验,若读出数据对生成多项式取余,若余数为0,则信息传输正确,否则信息传输错误。

fp_code=fopen(“Pc14codecodecode.txt”,“r”);//共享计算机组名为Pc14的codecode文件夹 fscanf(fp_code,“%d”,&len);//读取长度

fscanf(fp_code,“%c”,&bb);//读取长度后一个空格 for(int i=0;i

fscanf(fp_code,“%c”,&data_t[i]);//按照长度读取每一个字节 fclose(fp_code);

int ju=crc12(data_t,len);

//crc12校验,返回

程序清单:

发送端:

#include #include typedef unsigned int uint;typedef unsigned char uchar;

/*buf输入的信息,len信息长度*/ int crc12(uchar buf[],int len){ int wcrc;int i,iq;uchar ir;wcrc=0;///crc码

iq=0;//buf字符串下标,从0到len-1,初始化为0 ir=0;//初始化为0,0到7的变换,while(iq>ir)){ wcrc|=0x01;} if(wcrc>=0x1000)//这里就是判断哪个最高位是1的13位进制数满不满足,满足就异或0x180D { wcrc^=0x180D;} wcrc<<=1;ir++;if(8==ir){ ir=0;iq++;} } //对后面添加12个0做处理,for(i=0;i<12;i++){ if(wcrc>=0x1000){ wcrc^=0x180D;} wcrc<<=1;} wcrc>>=1;//因为移多了一次,所以这里移回来 return wcrc;//最后返回的就是crc12码 } /*获取字符串长度的函数*/ int ucharstrlen(uchar buf[]){ int i=0;while(buf[i]!='')i++;return i;} int main(){ FILE *fp_crc, *fp_code;uint crcnum;uchar ch[120];printf(“用模2除法计算CRC码-生成多项式为CRC-12 n”);printf(“n”);printf(“请输入的内容:n”);scanf(“%s”,ch);// printf(“内容:%sn”,ch);int len=ucharstrlen(ch);crcnum=crc12(ch,len);printf(“crc校验码:%xn”,crcnum);fp_crc=fopen(“C:codecodecode.txt”,“w”);//将计算的数据存入共享的文件夹中,所以我们必须要先建立一个codecode的文件夹,并设为共享 if(fp_crc==NULL){ printf(“创建文件失败!n”);exit(0);} fprintf(fp_crc,“%d ”,len+2);/*我先存入字符的长度+crc码长度,再加上crc码,我们这个12位分成了2个8位的字节来存放*/ for(int i=0;i>4));//先去12位crc码的前8位

fprintf(fp_crc,“%c”,(crcnum<<4)&0xF0);//再取crc码的后4位,然后剩下的补0,使其够8位

fclose(fp_crc);//最后存入文档中

printf(“发送编码:%s%xn”,ch,crcnum);printf(“发送成功n”);return 0;}

接收端:

#include #include typedef unsigned char uchar;int ucharstrlen(uchar buf[]){ int i=0;while(buf[i]!='')i++;return i;} /*这里校验数据是否对不对和生成crc码那个算法是一样的,最后生成的crc12是不是0就可以知道数据对不对了*/ int crc12(uchar buf[],int len){ int wcrc;//返回最终的crc码 int i,iq;uchar ir;///对于每一字节的信息的移位下标,0-7 wcrc=0;///crc码

iq=0;//字符选取下标,0-len ir=0;while(iq>ir)){ wcrc|=0x01;} if(wcrc>=0x1000){ wcrc^=0x180D;}//判断够不够13位,够就异或 wcrc<<=1;ir++;if(8==ir){ ir=0;iq++;}//8==ir时,就表示iq下标的位已经取完了,该取一下个字符的,} wcrc>>=1;return wcrc;} int main(){ // EVILKOK-49CC625codecode FILE *fp_code,*fp_crc;uchar data_t[120],bb;int ax,bx,crc,cx,qx;int px=0x180D,len;fp_code=fopen(“C:codecodecode.txt”,“r”);if((fp_code)==NULL){ printf(“can not open file!n”);exit(0);} fscanf(fp_code,“%d”,&len);//读取长度

fscanf(fp_code,“%c”,&bb);//读取长度后一个空格 for(int i=0;i

printf(“t文件读出数据为:”);for(int j=0;j

printf(“%c”,data_t[j]);printf(“%x”,data_t[len-2]);printf(“%x”,data_t[len-1]>>4);printf(“n”);

int crc12_=data_t[len-2];printf(“tcrc校验码为: %xn”,(crc12_<<4)|(data_t[len-1]>>4));int ju=crc12(data_t,len);//crc12校验 if(ju==0){ printf(“t校验成功,数据无误n”);}else{ printf(“t数据错误”);} printf(“nt”);return 0;}

第三篇:计算机网络课设点对点聊天

《计算机网络》课程设计说明书

(点对点聊天程序)

院:

计算机与信息科学学院

学生姓名: 专

业:软件工程 班

级:1401班

完成时间:2016年12月

摘 要

目前即时通讯软件在平时的生活中有着十分广泛的应用,但是对绝大部分的软件来说,都必须得应用在互联网上,必须在一个Internel环境下才能使用。有的时候单位内部的员工,同学,可能没有互联网环境或者其他的原因希望不用上Internet就可以进行通讯,这样开发局域网通讯程序就有了必要性。本文提出了局域网通讯软件的需求,并详细对网络协议TCP/IP协议族进行了介绍和研究,如TCP,UDP,广播,IP等相关的技术。并对网络通讯原理进行了说明,采用了Client/Server模型, 程序基于TCP协议,通过socket接口来实现局域网内的即时通信工功能即聊天的功能。服务器端的一个端口用来监听对服务的请求,另外有一个临时端口用来给客户端发送数据,当客户端向该地址提出连接请求时,服务器端会对它的请求做出相应的反应。该软件采用多线程技术支持多用户操作,能够帮助企业在局域网内搭建起自己的聊天系统。避免了必须的经过互联网的过程。经过测试,程序能够有效达到基本的预期要求

关键词 课程设计;计算机;TCP/IP协议;服务器/客户端;JAVA;

引言

近年来,随着全球信息化进程的不断发展,网络也在飞速发展。出于高效、快速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。然而,随着企业规模的扩大,业务量的增加,在局域网上运行的应用越来越多,如知识库、网络会议、数据库应用和数据的同步与备份等,这些应用对局域网的信息吞吐、处理能力的要求也越来越高。这些在企业内部原有局域网设计之初未曾考虑到的新情况的出现使得局域网不堪重负,容易发生信息阻塞,此时,局域网不但不能提高生产效率,反而成为企业发展的瓶颈。

了解决上述矛盾,人们提出了许多方法。提升网络带宽及增加服务器的吞吐能力是解决此矛盾的一种方法。然而,从企业运行的成本方面考虑,无论是单纯地提升网络带宽或增加服务器的吞吐能力都不能从根本上解决局域网资源紧张的问题,对旧有局域网的大规模硬件改造反而会增加企业的负担。

基于Socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。

基于Socket的局域网聊天工具是此类局域网通信软件的具体实例之一,它很好地诠释了Socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。

基于Socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。

目录

1设计原理基础.........................................................2 1.1 TCP/IP简介....................................................2 1.1.1 TCP/IP概念..................................................2 1.1.2 TCP:传输控制协议............................................3 1.1.3 TCP连接建立与终止...........................................3 1.2 IP:网际协议...................................................4 1.3 UDP:用户数据报协议............................................5 1.4 Socket网络编程原理............................................6 2设计方法及思路.......................................................7 2.1 思路...........................................................7 2.2编程方法.......................................................7 3系统需求分析与概要设计..............................................10 3.1功能需求分析..................................................10 3.4运行需求分析..................................................11 4.程序源码...........................................................12 4.1接收消息......................................................12 4.2监听..........................................................14 4.3发送消息......................................................15 4.5运行结果......................................................19 4.5.1 发送消息................................................19 4.5.2 接收消息................................................19 4.5.3 群发....................................................20 4.5.4 退出系统................................................21 5出现问题及解决方法..................................................23 6 课程设计的总结体会.................................................25 6.1总结..........................................................25 6.2展望..........................................................26 参考文献.............................................................27 致 谢...............................................................28

1设计原理基础

1.1 TCP/IP简介

1.1.1 TCP/IP概念

首先网络协议一般是通过分不同的level进行开发的,每一层都有自己的通信功能。对于某一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统,如图所示。

图1 TCP/IP结构

如图所示,每个level都有不同工作:

1)链路层,也称为数据链路层或网络接口层,通常包括PC机自身的网络接口卡和本

机操作系统中的设备驱动程序,用来处理相关的物理接口。

2)网络层,也被称为互联网层,通常用于处理网络活动中的分组活动,例如分组的选路。在协议族中,如图所示,网络层协议主要包括了3个重要的协议。

3)传输层,其目的主要是为通过网络相连的两台主机的应用程序间提供end-to-end的通信。在TCP/IP协议族中,有两个主要的且互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。其中,TCP是提供高可靠性的数据通信。它可以通过三次握手,超时设置等机制来有效地保证了数据传输的可靠性。而另外一个协议,UDP则为应用层提供一种相对要简单些的服务。它的工作只是把数据分组从发送方传输到接收方,但是数据分组能否成功达到接收方它不会给予保证。如果需要可靠性就必须得通过其他层来完成。4)应用层,主要同于上层的应用程序进行的操作。

1.1.2 TCP:传输控制协议

TCP提供的是一种有保障的服务。确保了传输的可靠性,运用TCP协议的主机在交换数据之前必须首先建立一个连接。TCP主要是利用下面的步骤来确保其服务的:

1)首先在应用程序产生TCP报文时会进行大小控制,根据算法决定的发送的数据块

大小。然后再进行发送。

2)当主机利用发出一个数据段之后,它会启动一个定时机制,如果在规定的时间内接收不到确认数据,发送方就会重发。

3)TCP的一端收到另一端发送来的数据时,它将发送一个确认。

4)TCP还有头部检测。工作是检测数据在传输过程中是否发生改变。如果存在改变,那么TCP将丢弃这个报文段并且不会发送收到这个报文段的确认。

5)IP数据报的顺次在传输过程中可能会发生改变,所以TCP将对收到的数据进行重新排序,将收到的数据重新排列以后再交给应用层处理。6)TCP的接收端会丢弃重复的数据。

7)TCP还提供控制传输数据大小的机制。如利用滑动窗口机制来控制发送和接收数 据的大小。

1.1.3 TCP连接建立与终止

建立连接(如图2):

1)一方首先发送一个连接申请。

2)接收方发回包含服务器的初始序号的应答。同时,也发送一个收到客户方报文的一个确认。

3)发送申请方接收到接收方的确认序号,建立连接。这个过程就是建立TCP连接的“三次握手”过程。

连接终止(如图2):

1)提出终止的一方首先发送了一个终止连接的申请。

2)当接收方收到这个请求,会发送一个确认,再发送文件终止标志。3)然后这个接收方程序结束连接,此时也会发送一个结束标志和确认。

图二三次握手与四次挥手

1.2 IP:网际协议

IP协议是TCP/IP协议族中最为重要的协议。所有的其他协议产生的数据都需要以IP数据报形式来进行发送传输。而且IP提供无连接、不可靠的数据报传送服务:

1)IP协议不能保证IP数据报能成功地传输到接收方。如果发生某种错误时,如某个路由器暂时处于阻塞状态,IP也有一个简单的错误处理算法:丢弃数据,再通过发送一个特定的消息报给发送端,发送端接收到之后再进行处理。2)IP在发送数据报之后就不在关心次数据报的状态信息。每个数据报的处理是相互独立的。

IP地址分类如下图所示:

图三IP地址分类

1.3 UDP:用户数据报协议

UDP是一个面向数据报的传输层协议:进程的每个输出都会被封装成一个UDP数据报,并组装成一份待发送的IP数据报。

UDP不提供可靠性:其会把应用程序传给IP层的数据发送出去,它们能否达到目的地协议并不能保证。应用程序必须关心IP数据报的长度。如果它超过网络的MTU,那么就需要对IP数据报进行分片。

1.4 Socket网络编程原理

通常套接口分类:原始socket,流式socket和数据报socket.流式socket确保无差错无重复的顺序的数据传送.数据报socket定义了一种无连接的服务,传输数据时相互独立,无序的,也不确保可靠性.原始socket主要用于其他的网络协议实现的测试等。

无连接设计时,服务器方通常都是在等待客户机发来信息,一有信息到来就开始进行处理,不需要先进行连接。其程序的流程可以用图四表示。

图四

2设计方法及思路

2.1 思路

客户端与服务器建立连接,连接是通过申请的套接字实现的,客户打开一个套接字并把它约束在一个端口上如果成功就相当于建立一个虚拟文件以后就可以在虚拟文件上写数据并通过网络向外传送,完成连接后就可以通信了。客户机向服务器发送请求,打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请求操作。服务器在处理完客户的请求之后,要向客户机发送响应消息。客户通过关闭套接字来结束TCP/IP对话。

当使用TCP/IP协议发送客户服务器服务程序时,服务器需要等待任意数量客户端的连接,以便为他们提供服务。客户端连接服务器时,必须先知道服务器的名称。在TCP/IP中,就是服务器的IP地址和端口号。bind()函数实现将服务器绑定到一个已知的名字上的功能。接下来要将服务器套接字设置为监听状态,这是通过listen()函数完成的。在监听状态下,如果客户端向服务器发起连接请求,服务器通过调用accept()函数来接受该连接请求。服务器与客户端完成连接后,就可以进行数据通信了。对于客户端来说,首先调用connect()函数向服务器发出连接请求。如果服务器接受了该请求接下来就可以与服务器通信了。

2.2编程方法

WinSocket通信的步骤:

1.在服务器端的应用程序中的网络通信的步骤如下:

(1)建立服务器端的Socket,开始侦听整个网络中的连接请求。

(2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接,再继续进入监听状态。

(3)在监听的过程中,如果有用户发出了请求,则服务器会产生一个新的连接

Socket来处理用户的请求,而原来的Socket仍然会进行监听操作。

(4)当完成通信后,服务器关闭与客户端的Socket连接。2.在客户端应用程序中的网络通信的步骤如下:

(1)建立一个客户端的Socket。

(2)从命令行中得到服务器的名字,并进行查询以得到服务器的IP地址;

(3)从命令行中得到服务器所提供的端口号,以便进行下一步的操作;

(4)发送连接请求到服务器,并等待服务器的回馈信息。

(5)连接成功后,与服务器进行数据的交互。

(6)数据处理完毕后,关闭自身的Socket连接,释放进行连接所分配的资源,客户端的程序运行完毕。

图五

其主要工作流程为: 服务器方首先创建一个socket,再调用绑定函数将该socket和本地网络地址绑定,然后调用监听函数对socket进行侦听同时也规定其处理大小,之后就调用接收函数来接收连接。

客户端在建立套接口后就可调用连接函数和申请和服务器建立连接.在服务器接收申请后建立连接,然后客户机和服务器之间就可以发送和接收数据.最后,待数据传送结束后,关闭socket.2.3.3C/S模型介绍。

C/S模型一般是基于连接的来交换信息的.它通常是由两部分组成:1)Server 服务器方一般都是在等待客户方的申请,建立connect后再进行通信。2)Client 客户方会给一个已知的服务器方发送一个connect申请,当服务器端接收请求之后connect成功。

3系统需求分析与概要设计

3.1功能需求分析

(1)用户端之间的信息发送,本程序需要实现的最基本的功能。用户在界面上可以将自己需要发送的信息填入相应的对话框中,点击发送按钮后,可以将信息正常的发送给相应的其它用户,这个过程中的客户端与客户端之间使用点对点发送信息,预计利用TCP/IP协议中的UDP协议,在本程序中共需要3个端口,此功能预计使用3号端口。

(2)在线用户主机IP列表的维护。在用户发送信息之前,需要选择相应的目的地端IP,这也就需要客户端拥有在线用户主机的IP地址,这个在线主机列表的维护是需要客户端定时自动向服务器端发送信息,服务器端收集并维护在线用户列表,再发送回客户端。需要在客户端和服务器端都使用定时器来完成此功能。此功能预计使用1、2号端口。

(3)在C/S模式中,服务器与客户端是相互依赖的。在客户端启用以后,需要查看服务器端是否在线,服务器在线才能正常使用客户端,如果服务器不在线,则在检测一定次数以后自动退出客户端程序。在使用过程中,客户端在指定时间内未向服务器端发送信息的,服务器认为客户端下线;客户端在一定时间内未收到服务器端信息的,认为服务器已经下线,则提示用户并建议退出,在用户一定时间后没有退出的则自动关闭客户端程序。

3.2 数据需求分析

(1)客户端之间聊天信息。在控件上显示时格式化,更易于用户的查看自己发送或接收到的信息。

(2)在线用户聊天信息。服务器端存放在适当的空间中,在发送给客户端时,对信息列表进行格式化,便于客户端提取信息。

(3)客户端向服务器端发送的确认在线信息。包括客户端刚刚启动时的初始化信息和在使用过程中的确认在线信息。

(4)其它程序内部可能需要设计的数据结构体

3.3性能需求分析

(1)可靠性高,能在由于系统问题或其它原因产生错误后,作出相对应处理,比如网络初始化失败、服务器不在线等,可以提示用户安全退出本程序,在出现不可知的错误以后,可以尽量安全的退出程序。在程序的设计过程中,要求能尽可能多的设想到用户使用过程中可能发生的事件,并能在判断事件后做出相应的处理,使程序具有较高的容错性能。

(2)宜操作性,程序简单易懂,容易上手使用。设计界面是,简化界面的复杂性,模拟QQ等现有即时通讯工具的界面,使用户能很容易看懂并使用。

(3)开发文档易理解,保证以后自己二次开发或他人接手开发时,能够清晰的理解整个系统的设计思路和实现细节。(4)模块化设计此软件的功能,不同的模块实现不同的功能,使得软件易于以后的维护与扩展,在以后可以更好的完善本软件的功能,更方便于在工作中的应用。

3.4运行需求分析

(1)用户界面

程序较小,启动速度快。可在网络中使用,有注册功能,需进行用户登录。启动后的应用界面要清爽,设计要简单明了,要具有较高的易用性。

(2)故障处理

在遇到可预知的故障与情况时,能提示用户并自动退出;在遇到不可预知的故障时能安全退出。

4.程序源码

4.1接收消息

Display display = Display.getDefault();

@Override

publicvoid run(){

text.append(tr.inetAddress+“对我 Display.getDefault().asyncExec(new Runnable(){

@Override

publicvoid notifyResult(Object obj){ tr=(TalkResult)obj;t=new Thread(new Task(new MyNotify(){ createContents();说:rn”+tr.content+“rn”+new Date()+“rn”);

if(button_1.getSelection()==true){

String ip=tr.inetAddress.getHostAddress();String content=UUID.randomUUID().toString();byte[] bs=content.getBytes();//将要发送的内容转

//将hashset中的数据显示到table中去 table.removeAll();

for(InetAddress a:hashSet){

}

TableItem ti=new TableItem(table, SWT.NONE);ti.setText(new

//TODO:将这个地址存到集合中(不允许重复),hashset hashSet.add(tr.inetAddress);text.append(“========”);String[]{ a.getHostAddress()});成字节数组

}

}

}

intlength=bs.length;//要发送的内容的字节数组的长DatagramPacket dp=null;try {

InetSocketAddress addr=new

dp=new DatagramPacket(bs, length,addr);ds=new DatagramSocket(7890);ds.send(dp);度

InetSocketAddress(ip,Task.receivePort);

} catch(Exception e){

}

e.printStackTrace();ds.close();}finally{ });}));t.setDaemon(true);t.start();

Thread t2=new Thread(new ReceiveEixtMsgTask(new MyNotify(){

@Override

publicvoid notifyResult(Object obj){

TalkResult tr=(TalkResult)obj;InetAddress ia=tr.inetAddress;hashSet.remove(ia);

Display.getDefault().syncExec(new Runnable(){

@Override

publicvoid run(){

}

table.removeAll();

for(InetAddress a:hashSet){

}

TableItem ti=new TableItem(table, SWT.NONE);ti.setText(new

String[]{ a.getHostAddress()});});

} } }));t2.setDaemon(true);t2.start();

shell.open();shell.layout();while(!shell.isDisposed()){

} if(!display.readAndDispatch()){ } display.sleep();

4.2监听

//选择ip 发送消息

table.addSelectionListener(new SelectionAdapter(){

//退出

button_2.addSelectionListener(new SelectionAdapter(){

@Override

publicvoid widgetSelected(SelectionEvent e){

MessageBox mb=new MessageBox(shell,SWT.OK|SWT.CANCEL);mb.setMessage(“是否退出?”);intr=mb.open();if(r==32){

@Override

publicvoid widgetSelected(SelectionEvent e){

} TableItem[] tis=table.getSelection();if(tis==null || tis.length<=0){ } TableItem ti=tis[0];String ip=ti.getText();text_2.setText(ip);return;});//32/

}

} intmyport=Integer.parseInt(text_3.getText());byte[] bs=“bye”.getBytes();intlength=bs.length;for(InetAddress a:hashSet){

} System.exit(0);

String ip=a.getHostAddress();DatagramSocket ds=null;try {

InetSocketAddress addr=new

dp=new DatagramPacket(bs, length,addr);ds=new DatagramSocket(myport);ds.send(dp);InetSocketAddress(ip,ITalks3.EXITPORT);

} catch(Exception el){

}

el.printStackTrace();ds.close();}finally{ });

4.3发送消息

//发送

btnNewButton.addSelectionListener(new SelectionAdapter(){

@Override

publicvoid widgetSelected(SelectionEvent e){

String s=text_1.getText();//内容

intmyPort=Integer.parseInt(text_3.getText());//发送端口 DatagramSocket ds=null;byte[] bs=s.getBytes();//将要发送的内容转成字节数组 intlength=bs.length;//要发送的内容的字节数组的长度 if(button.getSelection()==true){

for(InetAddress a:hashSet){

String ip=a.getHostAddress();

//DatagramPacket的构造方法参数,三个参: 最后一个参数//UDP中的每一个包都必须指明要发送的地址 try { 表示另外一台机器的地址和端口

} privateintreceivePort=10002;//接收用端口 privatebyte[] buf;//接收用的字节数组 private DatagramPacket dp;//Packet

}

}

}

InetSocketAddress addr=new

DatagramPacket dp=new DatagramPacket(bs, ds=new DatagramSocket(myPort);//使用本机上的哪一个端口发送 ds.send(dp);

e1.printStackTrace();ds.close();InetSocketAddress(ip,receivePort);length,addr);

String ip=text_2.getText();//对方ip

//DatagramPacket的构造方法参数,三个参: 最后一个参数表示//UDP中的每一个包都必须指明要发送的地址 try { }else{

}

}

InetSocketAddress addr=new

DatagramPacket dp=new DatagramPacket(bs, ds=new DatagramSocket(myPort);//使用本机上的哪一个端口发送 ds.send(dp);

e1.printStackTrace();ds.close();InetSocketAddress(ip,receivePort);length,addr);

} catch(Exception e1){ } finally{ 另外一台机器的地址和端口

} catch(Exception e1){ } finally{ });

private DatagramSocket ds;//Socket

private HashSethashSet=new HashSet();@Override

publicvoid run(){

//int port=Integer.parseInt(text_1.getText());buf= newbyte[1024];//字节数组,用来缓存数据

dp=new DatagramPacket(buf, buf.length);//构建一个数据包对象 try { ds=new DatagramSocket(receivePort);//构建一个数据包Socket,占用UDP的9999端口,进行接收

while(true){ ds.receive(dp);//用这个9999端口来接收数据,存在dp数据包对象的System.out.println(new buf缓存空间

String(buf,0,dp.getLength()));//将字节数组转成字符串输出

@Override

publicvoid run(){

String s=new String(buf, 0, Display.getDefault().asyncExec(new Runnable(){ dp.getLength());//dp.getLength()接收的实际长度

InetAddress address=dp.getAddress();

text.append(address+“对我说:rn”+s+“rn”+new

Date()+“rn”);

//将hashset中的数据显示到table中去 table.removeAll();

for(InetAddress a:hashSet){

TableItem ti=new TableItem(table, SWT.NONE);ti.setText(new

//TODO:将这个地址存到集合中(不允许重复),hashset hashSet.add(address);

text.append(“========”);String[]{ a.getHostAddress()});

}

}

} } e.printStackTrace();} catch(Exception e){

}

} });

4.5运行结果

4.5.1 发送消息

测试中本机ip为192.168.14.134,对方ip为 192.168.14.134,本机向对方发送:“这是测试” 对方接收到消息,并且将本机ip加入到在线列表用户中

4.5.2 接收消息

测试中本机ip为192.168.14.134,对方ip为 192.168.14.134,对方向本机发送:“hello”,本机收到消息,并将对方加入到了在线列表中

4.5.3 群发

选中群发,然后发送消息,显示再列表中的用户将都会收到相同的消息

4.5.4 退出系统

按退出按钮,用户将消失在在线用户列表中

5出现问题及解决方法

1、在建立Socket连接时,两端的端口号必须设为一致,否则无法建立连接。

2、建立好连接之后,必须按照给定的格式输入通信信息,即m+输入的信息内容,否则,将会出现“no this command”的提示。

3、如果一个使用某端口的程序没有关闭,另一个程序就不能使用这个端口。

4、必须先连接服务器端,再连接客户端,否则,不能预期将服务器端和客户端连通。课程设计的总结体会

6.1总结

课程设计终于完成了。在这段不长的时间里,我感触很深,也学到很多东西。我对winsock双机通信有了更深的了解和认识,其原理和功能也加深了理解。TCP协议我们以前也学过相关知识,经过这次设计,相关的知识得到进一步巩固,运用也变得更加熟练。我学习和了解了有关JAVA中的相关知识和应用,JAVA开发环境也更加熟悉。通过这次课程设计,我不仅学习到了新的知识,也对以前学过的相关的知识有了更深入的理解和掌握。不仅加强了我的理论知识的学习,也增强了我的动手能力,对知识的理解不再局限于表明,理解更加透彻,也更巩固。

以前的学习都是单一方面的知识,这次通过课程设计,将这三个方面的知识综合起来,显然难度是加大了。开始的时候我也感觉似乎无从下手。但在网上查找了相关资料,并且请教了一些同学后,有了一些头绪,并着手开始设计和实践。

我们组这次做的课题的目的就是通过套接字在客户端和服务器之间建立连接,这个连接是以TCP协议传输。在建立连接之后实现客户端与服务器之间的通信,从而设计相关函数的调用和对套接字的应用。

1、客户连接(Client connections)由客户启动,并将本地客户套接字与远程服务器套接字相连.客户套接字必须说明它们想连接的服务器.需要提供服务器的主机名或IP地址及其端口号.2、监听连接(Listening Connections)是等待客户的被动服务器套接字连接.一旦客户发出了新的请求,服务器就会为该特殊连接生成新的套接字,然后返回监听状态.监听服务器套接字必须说明代表其提供服务的端口吗(事实上,客户正是通过该端口进行连接的).3、服务器连接是由服务器激活的连接,负责接受来自客户的请求.这些不同的连接种类只对建立客户与服务器之间的连接具有重要性.一旦连接建立完毕.连接的双方都可以自由发出请求并彼此发送数据.这里面涉及什么是套接字,什么是流式套接字,为什么用流式套接字等问题。用套接字中的相关函数来完成通信过程,它的存在是为了区别不同应用程序进程间的网络通信和连接。流套接字用于提供面向连接、可靠的数据传输服务,又因为该服务将保证数据能够实现无差错、无重复发送,并按顺序接收,所以用了流式套接字。

6.2展望

通过设计实现和测试的数据表明,本文研究的局域网即时通信方法能有效地完成局域网之间的通信,但随着技术的发展,系统中还存在许多不足的地方,有待进一步改进和完善。同时,即时通信技术也在不断的提高,这迫切的需要新的技术和方法。在今后的研究过程中,还要注意以下几个方面的工作:

1)对网络通信技术的研究。正如我们所知道的,网络通信技术在建立在网络通信协议的基础上的。尤其是对TCP/IP协议族的研究,或者将来会出现更加有效安全的网络协议,这个方向一直是重点的研究方向。

2)安全性是一个非常重要的方向,无论是互联网还是局域网环境,安全性始终是一个重要的因素,其中包括一些有效的安全算法等,也是最值得关注的方向。

3)如何提高信息的效率,对于网络通信而言,效率一直是一个重点,怎么样能把网络的利用率做到最优,怎样把信息安全有效的传递,在传递过程中如何保证信息不会丢失,错误等

参考文献

[1]谢希仁.计算机网络.第4版.电子工业出版社.2006年

[2](美)W.RichardStevens.TCP/IP协议详解卷一.人民邮电出版社.2009年

[3]施炜李铮秦颍编著.WindowsSockets规范及应用-Windows网络编程接口.2002年

[4]广播地址_百度百科.http://baike.baidu.com/view/473043.html?wtp=tt [5]张文赵子铭杨天路魏小康著.P2P网络技术原理与C++开发案例.人民邮电出版社.2008年8月

[6]NetworProgrammingforMicrosoftWindows,SecondEditioneBook.PUBLISHEDBYMicrosoftPress.2002 [7](美)(JamesF.Kurose)库罗斯,陈鸣译.计算机网络自顶向下方法第四版.机械工业出版社.2008年

[8]CharlesPetzold著.windows程序设计(第5版).北京大学出版社.2009年 [9]罗军舟等编著.《TCP/IP协议及网络编程技术》.清华大学出版社.2004年 [10]叶树华著.网络编程实用教程(第2版).人民邮电出版社.2010年

[11]林涛著.计算机网络应用编程技术.人民邮电出版社.2006年[12]http://zh.wikipedia.org/,维基百科 [13]MSDNLibrary–October2001 [14]李凌著.Winsock2网络编程实用教程.清华大学出版社.2003年 [15]黄帆.多人聊天程序的一种设计与实现.中国水运(学术版).2006 [16]冀振燕著.UML系统分析设计与应用案例[M].人民邮电出版社.2003年 [17]黄永峰等著.IP网络多媒体通信技术.人民邮电出版社.2003年 [18](美)JEANNAMATTHEWS著.李毅超曹跃王钰等译.《计算机网络实验教程》(《COMPUTERNETWORKS:INTERNETPROTOCOLSINACTION》).人民邮电出版社.2006.1 [19](美)DouglasE.Comer林瑶等.《用TCP/IP进行网际互联第一卷:原理、协议与结构》.电子工业出版社.2001年5月

[20]AlexanderHeußner.ModelExtractionforSockets-basedDistributedPrograms.hal-00425099.version1-20Oct2009 [21]DavidA.Bryan.STANDARDS-BASEDP2PCOMMUNICATIONSSYSTEMS.BruceB.Lowekamp,advisor,DepartmentofComputerScience,CollegeofWilliamandMary [22]TCP三次握手.http://baike.baidu.com/view/1003841.htm

致 谢

真诚感谢老师在我们课程设计阶段给予我们的指导与帮助以及专业课的教授,在老师的指导下使我对网络专业知识有了更深的认识,并且您严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我,这些使我受益匪浅,并将成为我终身献身科学和献身事业的动力。在此向您致以诚挚的谢意与敬意。

第四篇:计算机网络课程设(12级本科)任务书

计算机网络课程设计任务书

一、课程设计目的:

通过一周的课程设计,培养进一步理解和掌握网络组网的过程及方案设计,为今后从事实际工作打下基础;熟练掌握子网划分及路由协议的配置,熟练掌握路由器和交换机的基本配置。

二、课程设计要求:

要求能根据实际问题绘制拓扑结构图,拓扑结构图可以是树形、星形、网状形、环状形及混合形结构的之一,清晰的描述接口,进行路由器或交换机的命令配置实现,并且每个方案的需有以下几部分的内容:

1、需求分析;

2、设计原则;

3、方案设计与实施:(1)方案设计

1)设备选型; 2)综合布线设计; 3)拓扑结构图;

4)IP地址规划(子网划分和CIDR技术)。(2)方案实施

1)路由协议的选择; 2)路由器配置; 3)交换机的配置。

三、课程设计题目

1.组建XX公司局域网 2.组建大型网吧局域网 3.组建小型企业局域网 4.组建校园局域网 5.组建智能化小区局域网 6.组建XX单位自动化办公局域网 7.组建某政府办公局域网 8.组建XX缴费局域网

四、要求和说明: 1.自己独立完成,最终提交课程设计报告和实验成果(实验成果提交为课程设计的最后两天,课程设计报告为课程设计的后一周。过期不查。)

2.课程设计报告格式(附后):封面、题目、时间地点、目的及要求、内容、详细的步骤和代码编写过程(绘制出拓扑图)、总结。3.指定时间必须在实验机房上机。

4.最终成绩包括平时考勤成绩(30%)、检查成绩(40%)、报告成绩(30%)。

注:最终考核成绩采用一票否决制,如三项中有一项成绩达不到60%则视为课程设计不及格。

5.实验设计内容必须以老师指定的题目为准,老师指定的题目为最终检查的依据。

附问题描述:

一、组建XX公司局域网

总体要求:

 背景:

共三栋楼,1号,2号,3号,每栋楼直线相距为100米。1号楼:三层,为行政办公楼,20台电脑,分散分布。

2号楼:五层,为产品研发部,供销部,30台电脑。其中20台集中在三楼的研发部的设计室中,专设一个机房,其他10台分散分布。这里要求供销部的电脑能够连接Internet,单位生产的产品的信息能向网上发布,其他的一律不能上网。

3号楼:五层,为生产车间,每层一个车间,每个车间3台电脑,共15台。 未来发展:

未来的3—5年,单位电脑会增加到150台左右,主要增加在2号楼的研发部,计划该部门增加两间专用机房用于新产品的研发和设计。 网络功能:

根据公司现有规模,业务需要及发展范围建立的网络有如下功能:(a)建立公司自己的网站,可向外界发布信息,并进行网络上的业务。(b)要求供销部可以连接Internet,与各企业保持联络,接受订单及发布本公

司产品信息。其他部门都不能连接Internet,但要求公司内部由网络连接。(c)公司内部网络实现资源共享,以提高工作效率。

(d)建立网络时应注意网络的扩展性,以方便日后的网络升级和增加计算机。

在公司内部建立公司的数据库,如员工档案,业务计划,会议日程等

二、组建大型网吧局域网 总体要求:

设计一个具有500个用户节点的大型网吧的网络,其拓扑结构为树形,pc通过交换机连接起来,网络之间通过路由器或交换机连接起来,选择路由协议,配置路由协议,实现局域网之间能够互相连通,在网络内部联网的分布使用的是私有IP地址,划分子网,通过路由器连接到互联网,并且设计其安全性。

三、组建小型企业局域网 总体要求:

现有150台计算机,设计一个小型企业网络方案,要求:

1.资源共享,网络内的各个桌面用户可共享文件、共享打印机等功能;

2.通信服务,最终用户可以收发电子邮件、实现Web应用、接入互联网、进行安全的因特网访问; 3.划分网段;

4.选择路由协议,配置路由,并为路由器设置密码。

四、组建校园局域网 总体要求:

校园网的建设是现代教育发展的必然趋势,建设校园网不仅能够更加合理有效地利用学校现有的各种资源,而且为学校未来的不断发展奠定了基础,使之能够适合信息时代的要求。校园网络的建设及其与Internet的互联,已经成为教育领域信息化建设的当务之急。假设学校有300台计算机,请规划各个部门,便于管理。

五、组建智能化小区局域网 总体要求:

运用自己对局域网组网技术的理解,设计智能化小区组网方案,使得一个具有200个住户节点的智能化小区能够进行网络通讯,且将整个小区可划分为四个区域: 1.网络中心区:以物业管理中心及监控中心为主的核心交换设备和服务器群; 2.远程网络接入区:包括外部网络接入口的路由器设备和网络安全设备; 3.园区网络区:包括从网络中心到社区服务设施的骨干交换设备;

4.家庭网络区:包括从网络中心到楼宇中的骨干交换设备,并为各住户单元提供网络接入端口,是整个小区网络系统的最基本单元。

六、组建XX单位自动化办公局域网

总体要求:

设计一个拓扑结构为树形的网络,pc通过交换机连接起来,网络之间通过路由器或交换机连接起来,配置路由,但是出于不同职能部门的管理、安全和整体网络的稳定,需要对各个进行即独立又统一的管理,要求进行子网划分,部门中又有下属多个二级单位,现要求通过路由器连接,实现不同的局域网之间能够互相通信,在同一个局域网中需实现打印共享。

七、组建某政府办公局域网 总体要求:

设计一个拓扑结构为树形的网络,建立政府的官方网站,可向外界发布信息,pc通过交换机连接起来,网络之间通过路由器或交换机连接起来,安全性通过路由器的访问控制来设置,在网络内部联网的分布使用的是私有IP地址,通过路由器连接到互联网,不同职能部门可以进行局域网划分。

八、组建XX缴费局域网 总体要求:

设计一个缴费网络拓扑结构,公司内部建立数据库,公司内部使用私有ip地址,要求收费部门通过路由器或交换机可以连接Internet,与各客户保持联络,接受缴费服务及发布一些关于缴费项目的信息。其他部门都不能连接Internet,但要求公司内部由网络连接,配置路由器、交换机,保证其安全性。

课程设计报告格式

一、课程设计的目的及要求

二、课程设计的内容(分析和设计)

三、绘制拓扑结构图

四、详细步骤

五、路由器或交换机配置的代码

六、显示最总的结果

七、课程设计总结 注释:

1.设计完成后必须提交:课程设计报告

2.各自独立完成。总体要求只是一些描述和参考,完成课设主要还是根据任务书中的第二点课设要求。

3.课设必须完成任务书上的基本要求才能达到及格以上,并且也可以根据自己的能力扩展任务书以外的功能。

4.封面格式如下:(一定要有封面):

课程设计报告

课程设计题目:

专 业: 班 级: 姓 名: 学 号: 指导教师:

年 月

第五篇:数据结构课设

数据结构课设 大整数计数器 1.问题描述

实现大整数(200位以内的整数)的加、减、乘、除运算。2.设计要求

设计程序实现两个大整数的四则运算,输出这两个大整数的和、差、积、商及余数。

3.数据结构

本课程设计采用顺序串来实现。4.问题分析

由于整数数据存储位数有限,因此引入串的概念,将整型数据用字符串进行存储,利用字符串的一个字符存储大整数的一位数值,然后根据四则运算规则,对相应位依次进行相应运算,同时保存进位,从而实现大整数精确的运算。具体设计思路如下:

(1)计算大整数加法时,采用数学中列竖式的方法,从个位(即字符串的最后一个字符)开始逐位相加,超过或达到10则进位,同时将该位计算结果存到另一个字符串中,直至加完大整数的所有位为止。

(2)计算大整数减法时,首先调用库函数strcmp判断这两个大整数是否相等,如果相等则结果为0,否则用compare函数判断被减数和减数的大小关系,进而确定结果为正数还是负数,然后对齐位依次进行减法,不够减则向前借位,直至求出每一位减法之后的结果。

(3)计算大整数乘法时,首先让乘数的每一位都和被乘数进行乘法运算,两个乘数之积与进位相加作为当前位乘积,求得当前位的同时获取进位值,进而实现大整数的乘法运算。

(4)计算大整数除法时,类似做减法,基本思想是反复做减法,从被除数里最多能减去多少次除数,所求得的次数就是商,剩余不够减的部分则是余数,这样便可计算出大整数除法的商和余数。

需求分析(1)任何一个表达式都是由操作数、运算符和界限符组成的,我们称之为单词.(2)表达式求值首先要符合四则运算规则: ① 先乘除,后加减 ② 从左到右进行运算 ③ 先括号内,后括号外(3)功能实现: ① 若当前单词为数字串,则压入数值栈 ② 若当前单词为运算符并大于运算栈的栈顶符号,则进栈 ③ 若当前单词为运算符并等于运算栈的栈顶符号,去括号,输出 ④ 若当前单词为运算符并小于运算栈的栈顶符号,则进行运算

课程设计的目的 通过课程设计全面掌握《C语言程序设计》关键知识点,掌握C语言中数组、指针、结构体、文件等方面的基本知识。

通过课程设计了解并掌握C语言程序设计的方法,熟悉C程序设计的开发环境及C程序的

调试过程。

培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研有关问题,学会自己分析、解决问题的方法。

课程设计的任务和要求 任务: 编程求出输入的两个正整数之和,这两个正整数的可能达到200位。

要求:

输入:

共有两行,第一行为第1个正整数;第二行为第2个正整数。

输出:

2个正整数之和。

主要参与成员

姓 名 学 号

系 别 班 级 主要作用(分工)

成果形式

设计 软件 作品 其他:

完成情况及以后的拓展设想 通过用C语言编写函数基本实现了大整数相加这个程序,但该程序仍存在一些不足,还可以加上一些语句使程序具有容错功能,并且可以正确计算一个负数和一个正数相加。

课 程 设 计 鉴 定 情 况 表 小组鉴定意见

小组长签名:

年 月 日

指导教师意见

教师签名:

****年**月**日

课程设计成绩 优 良 及格 不及格 教研室意见

年 月 日 备注 《C语言程序设计》课程设计报告书 作者:廖 序 课程设计概述 课程设计名称

大整数相加 任务要求: 编程求出输入的两个正整数之和,这两个正整数的可能达到200位。

输入:

共有两行,第一行为第1个正整数;第二行为第2个正整数。

输出:

2个正整数之和。开发环境: C语言。C语言是目前世界上流行、使用最广泛的高级程序设计语言。1972年,C语言在美国贝尔实验室里问世,后来又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(ANSI),根据C语言问世以来各种版本对C语言的发展和扩充,制定了ANSIC标准。

目前,在微机上广泛使用的C语言编译系统有MicrosoftC、Turbo C、Borland C等。这些C语言版本不仅实现了ANSIC标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。

C语言的特点: C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。

由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。

此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。

参考资料

李铮、叶艳冰、汪德俊,C语言程序设计基础与应用,清华大学出版社,2005 [2]CSDN技术中心

二、概要设计

为了实现大整数相加这个程序,将程序划分为了三个模块: 输入数据。运算。输出结果。

首先定义了子函数Input()来存储用户输入的两个加数,为了满足任意位数的两个大整数相加,在子函数Input()中嵌套调用子函数Init()使sum数组里面存放的数初始化为”0”。

然后定义子函数Long_Add()使两个大整数作加法运算,从后面往前面相加,附带进位。定义子函数Output()实现输出结果。

最后如下图所示,在主函数main中调用Input(),Long_Add(),Output()三个子函数实现程序。

三、详细设计

程序的流程图:

四、调试过程 第一次 测试数据a=***7,b=111111 编译运行后不能输出结果,检查函数后编译正确。再次分析,发现如果直接把a,b,sum定义为unsigned int型的话,计算出来的和的范围只能在0~65535之间,否则就会出现错误。尝试将a,b,sum存放到字符数组中,从个位开始,一位一位相加。

第二次 测试数据a=***7,b=111111 编译运行后仍不能输出结果。分析原因,在用于输出的子函数Output()中,输出数组字符数组sum[]前未确定和的最高非零位。

尝试加入for(i=0;i

第三次 测试数据a=99999919,b=99 编译运行后发现计算出来结果不正确。经过分析,函数中没有对最后

一个进位进行处理。

尝试加入while(carry > 0)语句,再次进行调试。

{ tempsum = sum[i]-'0'+carry;sum[i] = tempsum%10+'0';carry = tempsum/10;i--;} 第四次 测试数据a=99999919,b=99 编译运行后得到正确结果。

第五次 随意输入几组数据进行测试,结果都是正确的。程序得到实现。

五、结论与体会

通过不断的调试、修改,本课程设计最终实现了200位以内的两个大整数相加,但程序还

可以进一步完善,程序中仍存在一些不足之处,比如缺少容错功能,不能准确计算负整数加正整数,等等问题

虽然C语言程序设计在上学期做为我们的必修课已经学习过了,但书到用时方恨少,这次课程设计的学习程序设计中暴露出的我自身的问题更是非常明显。

一开始看到题目认为非常简单,直接将两个数都定义为整型。编写程序并运行后发现并不能达到题目的要求,计算出来的和只能小于等于65535,否则就会出现错误。分析后,将数据作为字符串来处理,用for循环语句从存数的字符数组中一位一位的取数出来,按照数位对齐,从个位开始,按位相加,逢十进一的运算规则进行运算。最后用字符输出函数putchar()输出计算出来的结果。由于程序偏大且较复杂,将程序划分为了输入数据、运算、输出数据三个子程序。数次编译调试后,最终使程序得以实现。

经过三个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,让我能够进一步的掌握和运用C语言来编写程序。要想学好C语言要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处和薄弱环节。

首先,基础掌握不牢固,对于C语言中的许多基本语法尚没有熟练掌握,在设计过程中仍需请教其它同学,查阅课本,设计效率很低。

其次,经典算法掌握不牢。在完成作业的过程中还需查阅书籍和借鉴他人。

再次,程序量过大的时候,头绪理不清。杂乱无章,无系统性,不便调试和阅览,自己也易于出错。

并且对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。

通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。

六、源程序清单 #include #include &l

t;string.h> #define Max 1000 char sum[Max+1];/*和*/ char a[Max],b[Max];/*两个加数*/ int len1,len2;void Input(char a[],char b[]){ int i,len;void Init(char a[]);/*对Init()函数进行声明*/ printf(“Please enter two integer:n”);scanf(“%s %s”,a,b);len1=strlen(a);len2=strlen(b);Init(sum);len=strlen(a);for(i=len-1;i>=0;i--)sum[Max+i-len] = a[i];} void Init(char a[])

{ int i;for(i=0;i

void Long_Add(char sum[],char new[]){ int i,j;int len;int tempsum;int carry = 0;/*进位*/ len = strlen(new);/*从个位开始,按位相加,逢十进一*/ for(i=Max-1,j=len-1;i>=0,j>=0;i--,j--){ tempsum = sum[i]-'0'+new [j]-'0'+carry;sum[i] = tempsum%10+'0';carry = tempsum/10;} while(carry > 0)/*处理最后一个进位*/ {

tempsum = sum[i]-'0'+carry;sum[i] = tempsum%10+'0';carry = tempsum/10;i--;} return;} void Output(char sum[]){int i,n;/*寻找和的最高非零位*/ for(i=0;i

Long_Add(sum,b);Output(sum);getch();return 0;

下载计算机网络课设word格式文档
下载计算机网络课设.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    课设小结

    本次课程设计我们小组顺利的完成了锅炉内胆水温与循环水流量串级控制系统。我们通过讨论对过程参数方面的知识有了更加深入的了解。我负责的是传模拟量采集模块。 和以前做......

    课设规范

    电 子 工 程 学 院 课程设计报告格式及要求 一、封面:单独1页(见样件) 二、摘要、关键词:中文(250~300字)、英文;单独1页 中文摘要前加:“摘要:”,英文摘要前加“Abstract:”。 关键词一......

    高频课设资料

    一、课程设计目的 由于高频振动器所产生的高频振动信号的功率很小,不能满足发射机天线对发射机的功率要求,所以在发射之前需要经过功率放大后才能获得足够的功率输出。 本次课......

    操作系统课设

    操作系统课程设计 一实验目的 在多道程序或多任务系统中,系统中同时处于就绪态的进程有若干个,也就是说能运行的进程数远远大于处理机个数。为了使系统中的各进程能有条不紊......

    操作系统课设

    课 程 设 计 报 告 课程名称: 计算机操作系统 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 计算机科学与技术学院 华 中 科 技 大 学 课 程 设 计 报 告 目 录 1 2 3 实验目......

    课设心得

    课程设计心得 在这学期的期末课设中我们很幸运的接触到了嵌入式,通过历时两天的课程设计,我们对嵌入式虽然说不上熟练,不过也算是已经入门。 通过老师介绍,我们知道当今社会,嵌入......

    ERP课设

    ERP原理与应用 课程设计报告-电器公司ERP系统应用班级:1121808 姓名:丁贤民 学号:201120180827 指导老师:徐玮 日期:2014.6.25 一. 实验时间和地点: 2014.06.25~2014.06.26 二.......

    EDA课设

    EDA课程设计报告 课题名称:智力竞赛抢答器 班级:11电科2班 姓名:代维宽 学号:201114580207 同组人:闻仔逊 指导老师:贾默伊任务书 一、用VHDL运用层次化设计方法设计一个小型数字......