版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统课程设计说明书
学院、系:软件学院专业软件工程设计题目:基于Linux的小型远程FTP服务系统的设计需求分析设计目的:ftp远程服务是操作系统的重要功能之一。用高级语言编写和调试一个简单的FTP服务系统,掌握对进程、线程、进程互斥、同步、通信、文件系统及网络编程的方法。从而加深对远程服务机制的理解和认识。1.2设计内容和要求客户端的要求客户通过身份请求后创建一个新线程来响应客户请客户可以完成目录的创建,删除,切换,查看当前目录下的文件。客户可以上传和下载目录到指定的文件夹。服务端的要求验证用户的登录信息。支持多线程的使用。记录活动客户数,客户在线数目加1,断开连接减1.2总体设计客户端与服务端建立连接模块:网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。其具有一个类似于打开文件的函数调用socket(),返回一个整形的Socket描述符,随后的连接建立,数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket和数据报式Socket。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。本系统使用前者。在使用socket进行网络传输之前,必须配置该socket。Bind函数将socket与本机上的一个端口相关联,随后就可以在该端口发起向服务端的请求和监听服务请求。面向连接的socket客户端通过调用Connect函数在socket数据结构中保存远端信息并与远端服务器建立一个TCP连接。只有面向连接的客户程序使用socket是才需要将此socket与远端主机相连。面向连接的服务器从不启动一个连接,它只是被动的在协议端口监听客户的请求。Listen函数使socket处于被动的监听模式,并为该socket建立一个输入数据队列,将到达的服务请求保存在此队列中,直到程序处理它们。Accept()函数让服务器接受客户的连接请求,当accept()函数监视的socket收到连接请求时,socket执行体将建立一个新的socket,执行体将这个新socket和请求连接进程的地址联系起来,收到服务请求的初始socket仍可以继续在以前的socket上监听。系统中的fork()函数生成一个子进程来处理数据传输部分,fork()函数对于子进程返回的值为0,所以包含fork函数的if语句是子进程代码部分,它与if语句后面的父进程代码部分并发执行。 客户端发送操作命令和服务端接受命令执行相应的操作:send()和recv()函数用于面向连接的socket上进行数据传输。Send()函数返回实际上发送出去的字节数,可能会少于你希望发送的数据。在程序中应将send()的返回值与欲发送的字节数进行比较。当send()返回值与len不匹配时,应该对这种情况进行处理。Recv()函数返回实际上接受的字节数。接受到客户端的命令后,确定要执行的那个命令,进入相应的子模块,完成相应的操作。客户端总体流程客户端验证验证密码验证失败验证失败退出退出验证成功验证成功服务器端服务器端客户端流程客户端客户端创建目录用户验证文件操作删除目录查看目录创建目录用户验证文件操作删除目录查看目录指令指令指令指令指令指令rmdirls-lmkdirrmdirls-lmkdir文件下载文件上传文件下载文件上传指令指令指令指令uploaddownloaduploaddownload服务器端服务器端流程服务器端统计在线人数客户验证统计在线人数客户验证3.详细设计 本系统的开发过程中,我做的是处理客户端发来的请求并调用系统函数执行相应的操作这一模块。服务端接受并处理cd,ls,quit,mkdir,rmdir,upload,download这样几种类型的客户端发来的命令。Cd工作路径:修改当前工作路径;ls工作路径:列出工作路径下的内容列表;quit:客户端退出系统;mkdir目录名称:在当前的工作路径下建立一个由参数确定的目录;rmdir目录名称:在当前工作路径下删除给定名称的目录;upload:将客户程序所在文件夹下的要求上传的文件上传到要求上传到的服务器端的那一文件夹下;download:将操作的当前工作路径下的指定的某一文件下载到客户程序所在的文件夹中。使用while循环不断接受客户发来的命令请求,并在客户端发来quit命令后,跳出循环,调用close()函数来释放该通讯的socket,从而停止在该socket上的任何数据操作。相应的源码:intmain()
{ /*
intargc,char**argv
if(argc!=2)
{
printf("Usage:./%sServerIPAddress\n",argv[0]);
exit(1);
}
*/
char*argv="30";
//设置一个socket地址结构client_addr,代表客户机internet地址,端口
structsockaddr_inclient_addr;
bzero(&client_addr,sizeof(client_addr));//把一段内存区的内容全部设置为0
client_addr.sin_family=AF_INET;//internet协议族
client_addr.sin_addr.s_addr=htons(INADDR_ANY);//INADDR_ANY表示自动获取本机地址
client_addr.sin_port=htons(0);//0表示让系统自动分配一个空闲端口
//创建用于internet的流协议(TCP)socket,用client_socket代表客户机socket
intclient_socket=socket(AF_INET,SOCK_STREAM,0);
if(client_socket<0)
{
printf("CreateSocketFailed!\n");
exit(1);
}
//把客户机的socket和客户机的socket地址结构联系起来
if(bind(client_socket,(structsockaddr*)&client_addr,sizeof(client_addr)))
{
printf("ClientBindPortFailed!\n");
exit(1);
}
//设置一个socket地址结构server_addr,代表服务器的internet地址,端口
structsockaddr_inserver_addr;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
if(inet_aton(argv,&server_addr.sin_addr)==0)//服务器的IP地址来自程序的参数
{
printf("ServerIPAddressError!\n");
exit(1);
}
server_addr.sin_port=htons(HELLO_WORLD_SERVER_PORT);
socklen_tserver_addr_length=sizeof(server_addr);
//向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接
if(connect(client_socket,(structsockaddr*)&server_addr,server_addr_length)<0)
{
printf("CanNotConnectTo%s!\n",argv);
exit(1);
}
charbuffer[BUFFER_SIZE];
bzero(buffer,BUFFER_SIZE);
//接受连接成功信息
read(client_socket,buffer,BUFFER_SIZE);
printf("ThismessagefromServer:%s\n",buffer);
bzero(buffer,BUFFER_SIZE);
//输入帐号和密码,中间以空格隔开
printf("请输入登录帐号和密码,中间以空格分开:");
//scanf("%s",buffer);不能用scanf因为scanf函数空格也
getstr(buffer);
printf("-----%s",buffer);
//向服务端发送登录信息后,清空buffer
write(client_socket,buffer,sizeof(buffer));
bzero(buffer,BUFFER_SIZE);
//取得服务端发来的是否登录成功的信息
read(client_socket,buffer,BUFFER_SIZE);
//判断是否登录成功
if(strcmp(buffer,"错误")==0){
printf("帐号密码有误\n");
close(client_socket);
return-1;
}else{
printf("%s\n",buffer);
}4.心得体会 通过本次课程设计,熟悉了Linux操作系统,学会了在Linux操作系统下使用其强大的编辑器开发、编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 制作护理教学软件大全
- 安庆酒店消防工程施工方案
- 传悄悄话公开课讲解
- 养老院洗浴护理中的健康宣教与教育
- 包头耀元新材料厂房建设项目环境影响报告表
- 山西省吕梁柳林县联考2025-2026学年初三下学期第十五周综合练习英语试题含解析
- 广东省梅州市梅江实验中学2026届初三下学期第四次联考英语试题含解析
- 浙江省玉环市2026年初三中考押题卷:英语试题含解析
- 湖北省黄冈浠水县联考2026届初三下学期开学调研试题语文试题含解析
- 河北省沧州市孟村回族自治县2026届中考英语试题仿真卷:英语试题试卷(2)含解析
- 医保局联席会议制度
- 食品车间班组长考核制度
- 纯劳务公司财务制度
- 银行AI在智能营销中的应用策略
- 超声设备维护保养规范
- 2026年乡村医生考核试题及答案
- 企业负责人职业健康培训
- 能源计量考试题及答案
- 肝硬化诊治指南2025解读
- 创业计划书股权构成详细说明
- 汽车展位租赁合同范本
评论
0/150
提交评论