Linux课程设计报告.doc_第1页
Linux课程设计报告.doc_第2页
Linux课程设计报告.doc_第3页
Linux课程设计报告.doc_第4页
Linux课程设计报告.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux课程设计报告 班级:电子信息科学与技术一班_ 一、设计目标.管理员端:1.基本信息录入2.删除信息3.查找信息4.修改信息5.信息排序 学生端:1.查看信息2.修改信息2、 原理分析及实现过程Socket通信原理:操作系统的进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。不同的进程运行在各自不同的内存空间中,进程之间的信息传递不可能通过变量或其它数据结构直接进行,只能通过进程间通信来完成。本机进程之间通信可以通过管道、命名管道、信号等实现通信,网间进程通信就要通过Socket进行通信。网间进程通信时通过端口号来唯一标识主机的进程。端口号被分为三类,一类是01023范围内的端口,被称为熟知端口,这些端口号已被分配给了因特网上的著名应用程序,第二类端口被称为登记端口,范围是102449151,为没有熟知端口号的应用程序使用的。第三类是客户端口号或短暂端口号,数值为4915265535,留给客户进程选择暂时使用。网络应用进程间通信普遍采用客户/服务器交互模式,该模式通常简记为C/S模式。在该模式中,通信双方中发起通信的一方被称为客户端,被动接受通信请求的一方被称为服务器。服务器方必须先启动,并时刻监听是否有客户端的请求到达。服务器通过多线程技术实现一对多通信。本系统是基于TCP/IP协议栈使用C语言来实现进程间的通信。进程通信过程:服务器端:1.先用socket函数来建立一个套接字,用这个套接字完成通信的监听。2.用bind函数来绑定一个端口号和IP地址。3.调用listen函数,使服务器的这个端口和IP处于监听状态,等待客户机的连接。4.用accept函数来接受远程计算机的连接,建立起与客户机之间的通信。 主要代码解析:#define PORT 4000 /定义端口号为4000,使用宏定义方便以后的修改int main(int argc, char *argv)int sockfd = -1, ret = -1;struct sockaddr_in sockaddr;if(sockfd = socket(AF_INET, SOCK_STREAM, 0) 0)/使用socket()建立套接字,并返回套接字号perror(create socket failed);return -1;memset(&sockaddr, 0, sizeof(sockaddr);sockaddr.sin_family = AF_INET; /地址信息sockaddr.sin_port = htons(uint16_t)PORT);sockaddr.sin_addr.s_addr = INADDR_ANY;if(ret = bind(sockfd, (const struct sockaddr *)&sockaddr, /套接字和本地地址绑定sizeof(sockaddr) 0)perror(bind failed);return -1;if(listen(sockfd, MAX_UNRESOLVE_LINK_NUMBER) 0)/通知服务器准备接受连接perror(listen failed);return -1;clntfd = accept(sockfd, (struct sockaddr *)&clntaddr, &len);/接受连接,创建子进程,用于处理客户端的请求客户端:1.用socket函数建立一个套接字,设定远程IP和端口。2.调用connect函数连接远程计算机指定的端口。3.建立连接以后,客户机用send函数通过socket发送数据。也可以用recv函数从socket读取服务器发送来的数据。服务器同样也可以用recv函数和send函数来收发数据。 主要代码解析:#define PORT 4000int main()int sockfd = -1, ret = -1;struct sockaddr_in clntaddr;sockfd = socket(AF_INET, SOCK_STREAM, 0); /创建套接字if(sockfd 0)perror(create failed);return -1;memset(&clntaddr, 0, sizeof(clntaddr);clntaddr.sin_family = AF_INET; /地址信息clntaddr.sin_port = htons(uint16_t)PORT);inet_pton(AF_INET, 127.0.0.1, &clntaddr.sin_addr.s_addr);ret = connect(sockfd, (const struct sockaddr *)&clntaddr, /将套接字与服务器端进行连接sizeof(clntaddr);if(ret 0)perror(connect failed); write(sockfd, &msg, sizeof(msg);/向服务器发送信息memset(buf, 0, sizeof(buf);read(sockfd, buf, sizeof(buf);/接受服务器端的信息功能实现的过程:整体功能框架图蓝色部分为未实现Client 网络通信的客户端,分别定义了不同用户的不同菜单,在这没有实现operiont,采用直接像服务器传递客户端的请求。Server 管理端,实现管理者的功能及网络通信的服务器端Manage 定义了实现学生成绩管理系统的一系列函数,在这由于一开始时没有设计file和linklist的功能,以后会增加linklis和file,file实现对文本文件中的信息的读取和写入,linklist用于实现读取的信息形成链表,已经对链表进行操作。Makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,makefile就像一个shell脚本一样。CC:=gcc CPP:=g+SOBJ=server.o manage.oCOBJ=client.oTARGET=server clientFLAG = -02server:$(SOBJ)$(CC) $ -o $ $(FLAG)client:$(COBJ)$(CC) $ -o $ $(FLAG)%.o:%.c$(CC) $ -o $ -c $(FLAG)%.o:%.cpp$(CPP) $ -o $ -c $(FLAG)clean:rm *.o -fr /删除所有的.o文件3、 测试与总结(结果如何)客户端连接服务器端,连接成功后进入主菜单界面学生菜单界面管理员菜单添加学生信息修改学生信息删除学生信息查询学生信息遇到的问题:我们以前就学习过网络编程,这次课程设计,老师又教会我们一些新的东西。系统中最主要的问题还是怎么实现服务器端和客户端的通信。一开始的时候实现了简单的通信,但是当实现服务器和客户端的多次通信时,我便在这里出现了问题,后来发现时while(1)放错了位置,调整顺序后变能实现服务器和客户端的连续通信。遇见最多的问题便是乱码,后来发现是读取文本时用的是char型变量,在字符串末尾没有添加0。总结:以前做过多次学生成绩管理系统,每次都会有新的收获。我们课上所学习的东西总是侧重于理论,很多时候做系统时,会遇到很多的bug,这个时候我们就要思路清晰,找出自己的错误。以前对于文件的读写,我一直掌握的不是很好,通过这次课程设计,使我对文件的读取有了较好的掌握。在这次课程设计中,系统产生了很多错误,我也遇到很多不懂得知识, 但通过看书上网查找资料,这些困难也一一克服了,让我真

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论