资源描述
基于Linux的模拟文件系统的设计与实现【实用文档】doc
文档可直接使用可编辑,欢迎下载
中北大学
操作系统课程设计
说明书
学院、系:
软件学院
专业:
软件工程
学生姓名:
申云如
学号:
1121011914
设计题目:
基于Linux的模拟文件系统的设计与实现
起迄日期:
2013年11月22日- 2013年12月6日
指导教师:
李玉蓉
2013 年 12月 6 日
1 需求分析
本次是基于Linux的模拟文件系统的设计与实现,其设计内容如下:
1、设计一个10个用户的文件系统。每个用户最多可以保存10个文件,一次运行用户可打开多个文件。
2、程序采用二级文件目录。(即设置主目录(MFD)和用户文件目录(UFD))。另外,可打开文件设置指针。
3、为了方便实现,对文件的读写作了简化。在执行读写命令时,只需改读写指针。并不进行实际的读写操作。
4、实现的基本功能主要包括:改变目录(CD),创建目录(MD),显示目录(DIR),删除目录(RD),打开全部文件(openall),打开单个文件(open),建立一个文件(create),删除一个文件(delete),写文件(write),读文件(read),改文件的保护码(change),退出(exit)等。
要求:
考虑特殊情况如:各个命令对全路径和相对路径的支持、目录不存在时,给出错误信息、不能用cd进入文件、命令之中不能有空格(如 ex it,给出错误提示)、相对路径的解析、路径中的空格剔除、新建目录或文件时的问题、重名问题、目录或文件的名字长度限制、目录或文件的名字中包含不合法字符(注意空格)、删除目录或文件时的问题、删除不存在的文件或目录给出错误提示、删除目录时目录不为空(如果该目录为空,则可删除,否则给出是否做删除提示,删除操作将该目录下的全部文件和子目录都删除)、进入到某个目录下,却要删除本目录或上级目录、不能用delete删除目录、不能用RD删除文件等都要考虑在内。
用户验证和操作算法思想:
用结构体struct user来对用户信息进行存储,利用userHead链表对用户进行检索和查找在线用户,以便更好的实现用户登录的验证.
目录操作算法思想:
首先用结构体struct ldir存储目录信息,利用数组对目录名以及目录创建时间进行存储,在每次创建目录时,检索目录链表,进行添加链表;改变目录,调用cd()来实现对目录的改变,删除文件时,依次检索链表来实现对链表的删除,并实施操作删除文件系统的目录;添加目录时,用添加链表的函数进行添加,并实施操作添加文件系统的目录.
文件操作算法思想:
首先用结构体struct fifle存储文件信息,利用数组对文件名,文件创建者,文件权限,文件创建时间,在每次创建文件时,检索文件链表,进行添加链表,并实施操作添加文件系统的目录;删除文件时,依次检索链表来实现对链表的删除,并实施操作删除文件系统的文件;改变文件权限时,查找文件链表并返回文件的基本信息,开始对文件的权限修改。
2 总体设计
本程序共分为11个功能,在小组任务分配中共分为四个部分:文件系统的整体设计接口和用户验证、目录和文件链表的操作和接口实现、目录操作功能的实现以及文件操作功能的实现.
主函数首先对用户进行验证,然后调用11个函数,来实现对文件系统各功能的实现,各函数为: cd();md();dir();rd();open();creat();delet();writ(); chmode();help();exit(1);
主函数主要是先对用户链表进行初始化,然后进行用户验证以及登录,并选择命令对文件进行操作。
整体流程图如下图2-1所示:
图2-1
3.详细设计
//添加目录列表
void adddir(char dirname[],char creattime[])
{
struct ldir *p,*q;
q=(struct ldir *)malloc(sizeof(struct ldir));
strcpy(q->dirname,dirname);
strcpy(q-〉creattime,creattime);
p=dirHead;
if(p==NULL) //判断是否是头指针userHead
{
dirHead=q;
dirHead-〉next=NULL;
}
else
{
while(p-〉next!=NULL)
{
p=p-〉next;
}
p—>next=q;
q—>next=NULL;
}
}//创建目录
void md()
{
time_t ptime;
time(&ptime);
char dirname[20];
int stat=0; //判断目录是否创建成功
printf(”请输入创建的目录名:\n”);
scanf("%s",dirname);
stat=mkdir(dirname); //创建目录
if(!stat)
{
printf(”目录创建成功!\n”) ;
adddir(dirname,ctime(&ptime));
}
else
{
printf("目录创建失败!\n");
}
}//改变目录
void cd()
{
char curdir[30]; //当前目录
char dirname[10]; //改变目录
printf(”当前路径为:\n");
strcpy(curdir,getcwd(NULL,0));
printf("%s\n",curdir);
printf(”请输入改变的目录\n");
scanf(”%s",dirname);
chdir(dirname); //改变目录
strcat(curdir,"/");
strcat(curdir,dirname);
printf("改变后的目录为:\n”);
printf("%s\n",curdir);
}
//删除目录
int deletdir(char dirname[])
{
struct ldir *p,*q;
p=dirHead;
if(p==NULL) //检验链表是否为空
{
return 0;
}
while(p!=NULL&&strcmp(p—〉dirname,dirname))
{
q=p;
p=p->next; //保存上一指针
}
if(p==dirHead) //寻找目录名是头指针
{
dirHead=dirHead-〉next;
}
else
{
q—〉next=p->next;
}
free(p); //释放占用内存
return 1;
}
//删除目录
void rd()
{
char dirname[20];
printf(”请输入要删除的目录名:\n");
scanf("%s",dirname);
if(deletdir(dirname))
{
printf(”目录删除成功!\n");
rmdir(dirname); //删除目录
}
else
{
printf(”目录删除失败!\n");
}
}
//显示目录
void dir()
{
struct ldir *p;
p=dirHead;
while(p!=NULL)
{
printf("%s\t%s\n”,p—〉creattime,p->dirname);
p=p—〉next;
}
}
登陆如图:
创建目录,显示目录如图:
删除目录如图:
改变目录如图:
4.心得体会
经过近两个星期的实验,这次的课程设计终于完成了。本次课程设计是基于Linux的模拟文件系统的设计与实现,本次课程设计是我们第一次运用linux编程,中间遇到了很多困难,在这次实验中,我们充分理解并运用了linux下的文件和目录的操作,理解了c语言的文件操作和目录操作,并且重新复习,理解了C语言,内存的开辟以及链表的使用方式。学习并熟悉了linux操作系统的使用,使用了linux下的C语言的编译环境gcc等的使用及操作方式,这对我们今后的学习发展有很大帮助.
在设计的过程中遇到了很多的问题,首先是我们不会用linux系统,再者就是在设计的过程中发现了自己的c语言编程有很多都不熟悉了,对以前所学过的知识理解得不到位,掌握得不够透彻,通过这次课程设计,我又把以前所学过的知识重新复习了一遍。总的来说,经过这次试验,我的知识得以扩充,能力得以提升。
信息工程学院
嵌入式系统设计课程设计报告
题目
:
基于Linux的文件下载功能的设计与实现
学号
:
学生姓名
:
专业名称
:
计算机科学与技术
班级
:
目录
1. 课题研究意义和现状- 1 -
1.1课题研究意义— 1 -
1.2课题研究现状— 1 -
2。 系统总体方案设计及功能模块介绍— 2 -
2.1 系统概述及总体方案设计- 2 -
3. 系统软件设计与实现- 2 -
3。1 主程序设计与实现- 2 —
3.2 服务器端程序设计与实现— 3 -
3。3 客户端程序设计与实现- 5 —
4. 系统测试- 8 -
4.1 系统软件测试— 8 —
4.2 系统硬件测试- 8 —
5. 总结和展望— 9 —
6。参考文献— 10 -
1. 课题研究意义和现状
1。1课题研究意义
随着微机技术的不断发展,在许多工程领域单片机的应用日趋广泛,已逐渐取代了单板机。为了适应这一新形势的变化,目前许多高校及一些中等专科学校已不再开设以单板机为主的“微机原理、接口及应用"课程,而直接讲授单片机及有关技术。但是目前缺少相应的实验设备及教材。鉴于这种情况,从教学和科研两个角度出发,我们此次的毕业设计尝试设计一种单片机教学实验板,来满足有关单片机教学实验的要求。从教学实验的角度出发,该实验板可适用于电类专业和非电类专业不同层次单片机教学实验的要求,如:自动化,仪器仪表,电子技术,电子测量,计算机应用,机电一体化等各专业,及机械专业。利用该板可以做各种编程实验,和一些简单的输入输出接口实验.如彩灯实验,数码管显示,音乐盒播放设计,键盘输入,模拟量的输入、输出,数模转换及电机正反转等。上述实验都不需要扩展硬件,该板上将提供全部接口和器件。同时为了强调学生的动手能力,在设计该实验板时,我们把AT89C51单片机的所有控制线、地址线和数据线经驱动后,将全部引入一排接线端子上,这就给系统的扩展提供了便利条件,我们可以在面包板上设计自己的接口电路,由单片机来控制实现.如存储器的扩充、键盘/显示接口芯片的扩展等、若连续做的话,可以使每个同学在自己占用的实验板上,设计成一个独立的应用系统。这对于同学们的实际工作能力,将会有一个很大的促进和提高。
1.2课题研究现状
嵌入式系统作为一个的热门领域,涵盖了微电子技术、电子信息技术、计算机软件和硬件等多项技术领域的应用.随着后PC时代来临,嵌入式应用呈现系统复杂化,应用多样化,硬件集约化、软件平台化等特点。行业发展现状与趋势: 目前,在上海地区,嵌入式系统开发涉及的行业众多, 水平参差不齐, 大多数停留在8位单片机开发这个层面上, 一部分单位开始采用32位机,并采用了实时操作系统。而具有能够同时进行软件设计和芯片设计的SOC系统设计的系统级高端人才几乎没有, 国际上领先的多核嵌入式系统设计, 可重构嵌入式系统设计在上海市的应用还停留在少数研究单位的研究中.
2. 系统总体方案设计及功能模块介绍
2.1 系统概述及总体方案设计
2.1。1系统概述
通过u-boot,内核,根文件系统的移植实现文件的下载。
2.1.2 总体方案设计
1.通过SD启动开发板;
2.将u-boot下载到开发板的内存中,并将u—boot烧写到开发板的EMMC上;
3。重新启动开发板,(从EMMC启动);
4。将内核下载到开发板的内存中;
网络传输(tftp服务器和客户端,tftp为文件传输协议);
5.将虚拟机中的一个叫做nfsdir的目录挂载到开发板的根目录;
挂载:nfsdir这个目录下的内容,虚拟机可以和开发板实现共享;
挂载:通过nfs服务器实现;
6。最终实现下载文件程序的运行.
3. 系统软件设计与实现
3.1 主程序设计与实现
系统移植与实现
1、新建/tftpboot目录,若有则不用新建
2、将u—boot—fs4412.bin、uImage与exynos4412-origen。dtb拷贝到tftpboot目录下
3、修改tftpboot目录权限
sudo chmod -R 777 /tftpboot
4、新建/source目录,若有则不用新建
5、将nfsdir压缩包拷贝到该目录下,解压sudo tar —xf nfsdir。ok。tar
6、修改source目录权限
sudo chmod -R 777 /source
7、检查tftp与nfs服务器是否安装
apt—cache policy tftpd-hpa
apt-cache policy nfs—kernel-server
如果没有安装,则在终端输入sudo apt-get install tftpd-hpa
sudo apt-get install nfs—kernel-server进行安装
8、修改配置文档:
tftp服务器:
1、 sudo vim /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY=”/tftpboot"
TFTP_ADDRESS=”0.0.0.0:69"
TFTP_OPTIONS="—l —c —s”0
保存退出
2、查看tftp服务器状态
sudo service tftpd-hpa status
若为正在运行,则重启:sudo service tftpd—hpa restart
若停止,则启动:sudo service tftpd-hpa start
nfs服务器:
1、sudo vim /etc/exports
/source/nfsdir *(rw,sync,no_subtree_check,no_root_squash)
2、查看nfs服务器状态
sudo service nfs-kernel-service status
若为正在运行,则重启:sudo service nfs-kernel-server restart
若停止,则启动:sudo service nfs-kernel-server start
9、启动开发板
设置参数:setenv ipaddr 192。168。100.200
setenv serverip 192.168.100.2
saveenv
tftp 41000000 u—boot—fs4412。bin
movi write u-boot 41000000
重启开发板,重新设置参数:
setenv ipaddr 192.168.100。200
setenv serverip 192。168.100.2
setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-origen。dtb\;bootm 41000000 - 42000000
set bootargs noinitrd root=/dev/nfs nfsroot=192.168。100。2:/source/nfsdir rw rootwait console=ttySAC2,115200n8 init=/linuxrc ip=192.168.100。200 clk_ignore_unused
saveenv
3。2 服务器端程序设计与实现
开始
3。2。1服务器端主流程图(如图1)
socket
connect
recv/send
close
结束
图1
3.2.2服务器端主代码
int main()
{
struct sockaddr_in servAddr;
memset(&servAddr,0,sizeof(servAddr));
servAddr。sin_family=PF_INET;
servAddr。sin_port=htons(8888);
servAddr.sin_addr。s_addr=inet_addr("192.168.100。200");
//socket
int cliFd=socket(PF_INET,SOCK_STREAM,0);
if(-1==cliFd)
{
perror(”socket error!");
return -1;
}
//printf(”socket ok!\n”);
//connect
int ret=connect(cliFd,(struct sockaddr*)&servAddr,sizeof(servAddr));
if(-1==ret)
{
perror(”connect error!");
close(cliFd);
return —1;
}
printf(”connect ok!\n”);
//send/recv
int fd=open("2。txt”,O_RDONLY);
if(-1==fd)
{
perror(”open error");
return -1;
}
char buf[100];
memset(buf,0,sizeof(buf));
while(1)
{
int ret=read(fd,buf,sizeof(buf));
if(0==ret)
{
break;
}
send(cliFd,buf,sizeof(buf),0);
}
//close
close(cliFd);
return 0;
}
3。3 客户端程序设计与实现
3.3。1客户端流程图(如图2)
开始
socket
bind
listen
accept
结束
图2
3.3。2客户端主代码
int main()
{
struct sockaddr_in servAddr;
memset(&servAddr,0,sizeof(servAddr));
servAddr.sin_family=PF_INET;
servAddr。sin_port=htons(8888);
servAddr。sin_addr.s_addr=inet_addr("192.168。100。200");
//socket
int servFd=socket(PF_INET,SOCK_STREAM,0);
if(-1==servFd)
{
perror("socket error");
return —1;
}
printf("socket ok”);
//bind
int ret=bind(servFd,(struct sockaddr*)&servAddr,sizeof(servAddr));
if(-1==ret)
{
perror(”bind error!");
close(servFd);
return -1;
}
printf(”bind ok!\n”);
//listen
ret=listen(servFd,10);
if(-1==ret)
{
perror("listen error!\n");
close(servFd);
return -1;
}
printf(”listen ok!\n");
//accept
int connFd=accept(servFd,NULL,NULL);
if(-1==connFd)
{
perror(”accept error!");
close(servFd);
return -1;
}
printf("accept ok!\n”);
//send/recv
int fd=open("2.txt”,O_RDONLY);
if(-1==fd)
{
perror("open error");
return -1;
}
char buf[100];
memset(buf,0,sizeof(buf));
while(1)
{
int sevc=recv(connFd,buf,sizeof(buf),0);
if(0==sevc)
{
break;
}
write(fd,buf,sizeof(buf));
puts(buf);
printf("recv from server %s success!\n",buf);
}
//close
close(servFd);
close(connFd);
return 0;
}
4。系统测试
4。1 系统软件测试
Server端运行结果如下图所示
图3
Client端运行如下图所示
图4
4.2 系统硬件测试
程序在虚拟机上运行结果如下所示
图5
程序在开发板上运行如下所示
图6
5. 总结和展望
在嵌入式的学习过程中,让我了解了什么是嵌入式系统。它就是以应用为中心,以计算机技术为基础,软硬件可定制,适用于不同应用场合,对功能、可靠性、成本、体积、功耗有严格要求的计算机系统。他一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统、用户应用程序四个部分组成,用于实现对其他设备的控制、监视或管理功能。嵌入式系统已经应用于科学研究、工业控制、军事技术、交通通信、医疗卫生、消费娱乐等领域,人们日常使用的手机、PDA、汽车、智能家电、GPS等均是嵌入式系统的典型代表。
老师在讲解过程中,首先交给我们的是一些简单的命令应用,Linux具有很丰富的命令,绝大多数命令具有大量的参数。在学习命令的过程中,只要你认真的看着老师操作还有认真听着他讲,你就会发现有些命令的操作还是很简单的,不过在操作的过程中,我也有遇到有些困难,会出现你按照书上学习的例子,将命令输入终端时会出现你不想要的结果,也就是错误的结果。这是问问旁边的同学或是懂的同学就可以解决了。在对于这部分的学习中,让我知道了命令对于嵌入式的重要性。它是linux的重要内容,linux中所有的功能都是通过命令执行。在实际应用中,为了减少系统开销,经常不使用图形界面,此时,对系统的所有操作都需要以命令方式来执行。在嵌入式系统开发过程中,由于目标机的性能和配置比较低,因此,一般情况下目标机仅具有命令窗口而没有图形界面,对目标机的所有操作都通过命令来实现.
6。参考文献
《Linux设备驱动开发详解(第2版)》——华清远见嵌入式培训中心宋老师著
《Cortex-M3+uC/OS—IT嵌入式系统开发入门与应用》-—华清远见嵌入式培训中心著
《精通Linux设备驱动程序开发》—-华清远见嵌入式培训中心宋老师翻译
《Linux内核修炼之道》—-华清远见嵌入式培训中心任桥伟老师著
《Linux那些事儿》—-华清远见嵌入式培训中心任桥伟老师著
《Linux操作系统》课程设计报告
学院工商学院
专业计算机科学与技术
班级计1341
学生姓名:王慢,韩霞,孙洁茹,李强,蒋涛
课程设计任务书
题目基于linux网络聊天室的设计
实验目的:
《Linux操作系统课程设计B》是一门在课程《Linux操作系统与程序设计B》后独立开设的实验课程。这一门实验课程的开设目的是为了通过学生独立完成一个基于Linux平台的较大型应用程序,巩固课堂上学到的Linux平台上的编程规范、技术和技巧,培养学生的编写较大型程序的能力和提高学生综合应用素质。
本课程设计实验主要围绕Linux平台上主流的基础技术展开,这些技术包括:Linux的进程、线程通信和同步技术; socket网络通信技术等,这些技术可以集中体现并应用在并发程序设计中.通过并发程序的设计与开发,培养学生底层软件开发的能力,并为将来从事UNIX/Linux平台开发、嵌入式开发等相对高端的软件开发工作打下基础。
课程设计的具体内容与要求:
1. 阅读(一个)示例代码,理解并发程序设计并掌握基于Linux平台并发程序设计的方法.
2. 在充分理解示例程序的基础上,重新定义和完善程序的功能,定义数据结构,划分程序的功能模块和接口,明确每个模块功能以及相互关系。
3. 完成程序的详细设计和编码,并测试。
4. 书写并提交文档
目录
1引言1
1.1课程设计背景1
1.2课程设计目的2
1.3课程设计内容4
2 技术介绍7
2.1TCP和UDP介绍
2.2客户/服务器模型
2.3网络套接字(socket)的概念
2。4多线程的概念
3 系统设计10
3.1 系统结构设计
3.2通信模块设计
4模块实现12
4。1系统调用相关函数
4.2 系统实现过程说明
5 运行效果15
结束语
参考文献18
附录19-24
基于linux网络聊天室的设计
摘要本课程设计主要实现一个Linux下的局域网聊天工具的设计。该设计主要分为两部分,客户端部分和主机部分。运行服务器端程序可以和任意运行了客户端程序的主机进行通信,通信内容能够通过终端显示出来.两个部分都使用C语言,利用vi编辑器,通过Berkeley套接口编程实现相关功能.
1 引 言
1。1课程设计背景
Linux是一种针对PC计算机和工作站的操作系统,它具有像Windows和Mac那样的功能齐全的图形用户界面(GUI,Graphical User Interface)。Linus Torvald和其它的遍布世界各地的编程人员共同开发的[1]. 提到Linux我们不能不提GNU和Unix。Richard M.Stallman建立的自由软件联盟出版了两种许可证,GNU通用公共许可证(GNU Gneral Public License,GPL)和GNU函数库通用公共许可证(GNU Library Gneral Public License,LGPL)。大部分GNU工程的软件和文档是以GNU通用公共许可证发行的,但是有一些库是以GNU函数库通用公共许可证发行的.按照GNU通用公共许可证的规定,Linux的源代码可以自由获取,这满足了我们学习该系统的强烈愿望.GPL充分体现了Stallman的思想:只要用户所做的修改是同等自由的,用户可以自由地使用、拷贝、查询、重用、修改甚至发布这个软件。通过这种方式,GPL保证了Linux(以及同一许可证下的大量其他软件)不仅现在自由可用,而且皮后经过任何修改这后都仍然可以自由使用。 Unix是由AT-T贝尔实验室的Ken Thompson和Dennis Ritchie于1969年在一台已经废弃了的PDP—7上开发的;最初它是一个用汇编语言写成的单用户操作系统。后来,他们又在PDP—11上用C语言重新编写(发明C语言的部分目的就在于此),把Unix做成为了一个文本处理系统,这使Unix在贝尔实验室得到广泛的应用。Unix的最初版本免费提供给许多知名的大学的计算机系使用。加州大学伯克利分校的计算机系就是其中的一名,并地Unix进行了修改增加了许多新的特点,这就是主为人知的BSC版本的Unix。与此同时,其它独立开发的Unix版本也开始萌生。Unix不断发展了,各种版本被应用到不同的计算机使用。而Linux最初是专门为基于Intel的个人计算机设计的。
(1)Linux的昨天 1991年,一名叫Linus Torvalds的芬兰大学生对Unix各种版本对于80386类的机器的脆弱支持十分不满,他决定要开发出一个全功能的、支持POSIX标准的、类Unix的操作系统内核,该系统吸收了BSD和System V 的优点,同进摒弃了它们的缺点。他独立把这个内核开发到0.02版,这个版本已经可以运行gcc、bash和很少的一些应用程序.后来,他又开始了在因特网上寻求广泛的帮助。 1994年,Linux已经升级到1。0版本.它的源代码量也呈指数形式增长,实现了基本的TCP/IP功能,此时Linux已经拥有大约10万的用户。(2) Linux的今天 作为一各服务器级的操作系统,Linux已经成熟了。现在的Linux内核由150多行代码组成,能作为Web服务器平台,也为越来越多的商业用户提供文件和打印服务。它既被当作邮件服务器的一种候选平台,也被当作一种强壮而安全的防火墙。 Linux的企业级特性,比如支持多处理器、支持大型文件系统、日志文件系统以及密集型计算和高可用性集群技术,也逐步成熟. 桌面上的Linux也在继续完善。KDE桌面提供的图形用户界面在易用性和可配置方面都能和微软的Windows相媲美。(3) Linux的明天 Linux最强大的生命力在于其公开的开发过程。每个人都有可以自由获取内核源程序,每个人都有要不得以运载源程序加以修改,而后他人也可以自由获取你修改后的源程序。Linux这种独特的自由流畅的开发模型已被命名为bazaar(集市模型)。Bazaar开发模型通过重视实验,征集并充分利用早期的反馈,对巨大数量的脑力资源进行平衡配置,可以开发出更优秀的软件。本联盟就是想通过bazaar开发模型,在网上召集一些Linux的爱好者,开发出更优秀的操作系统或软件.
1.2课程设计目的
本课程设计主要实现一个Linux下的局域网聊天工具的设计。该设计主要分为两部分,客户端部分和主机部分.运行服务器端程序可以和任意运行了客户端程序的主机进行通信,通信内容能够通过终端显示出来。两个部分都使用C语言,利用vi编辑器,通过Berkeley套接口编程实现相关功能.
要求:
(1)主要实现一个Linux下的局域网聊天工具的设计,进一步掌握vi,gcc等工具的使用,并且熟悉Linux下的网络编程,以及多线程编程。
(2)通过实际项目的分析、安装、配置、测试等工作,掌握用Linux系统下的网络聊天室的应用.
1。3课程设计内容
本课程设计主要实现一个Linux下的局域网聊天工具的设计。该设计主要分为两部分,客户端部分和主机部分。运行服务器端程序可以和任意运行了客户端程序的主机进行通信,通信内容能够通过终端显示出来.两个部分都使用C语言,利用vi编辑器,通过Berkeley套接口编程实现相关功能。
2 技术介绍
2.1TCP和UDP介绍
(1)UDP通信
UDP是用户数据报协议的简称。它是以中午连接的逻辑通信信道。UDP在传送数据之前不需要先建立连接,远地主机的传输层在收到udp数据报后,不需要给出任何确认,所以不能保证其交付时可靠。它的特点是:因无连接,故提供的是不可靠的信道,但也是因无连接而具有很好的传输效率。
(2)TCP通信
TCP是传输控制协议的简称,它是提供一条全双工的、可靠的信道。TCP提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接.
由于TCP要提供可靠的、面向连接的运输服务,所以不可避免地增加了许多系统开销,比如确认、流量控制、计时器以及连接管理等都需要占用许多系统的时空资源. 两个计算机之间如果使用TCP通信,其连接过程需要三次握手实现,如实验图2—1所示。
图2。1 用三次握手建立TCP连接
对于两个计算机之间连接的释放过程也需要类似的3次握手的互相确认的过程,如实验图2-2所示。
图2.2 TCP连接的释放过程
2.2客户/服务器模型
在客户/服务器模型中,多个相互通信的计算机都作为客户端,与网络服务器进行连接,并通过服务器进行信息的传递[3]。所以多个客户端之间的通信就变为了客户端与服务端的通信。所以,采用客户/服务器模型进行网络聊天需要分别编写服务器端和客户端的程序,服务器和客户端之间相互通信的同步关系和各自的程序流程如实验图2-3所示.
图2.3 Socket通信流程图
2.3网络套接字(socket)的概念
Socket接口上TCP/IP网络应用程序接口(API),它提供了许多函数和例程,程序员可以使用它们来开发TCP/IP网络应用程序.
使用Socket接口进行网络通信的过程如图1-3所示,简要步骤如下:
(1) 建立一个Socket。
(2) 按要求配置socket,将socket连接到远程
展开阅读全文