您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > linux-C-FTP-实验报告
嘉应学院计算机学院LINUX系统综合性实验报告计算机学院实验报告课程《LINUX系统》实验名称FTPSERVER&CLIENT实验类型综合性实验实验课时8学时专业计算机科学与技术班级学号学生姓名嘉应学院计算机学院2012年12月15日嘉应学院计算机学院LINUX系统综合性实验报告-2-一、实验目的........................................................................................................................3二、实验内容与要求............................................................................................................3三、主要仪器设备................................................................................................................3四、实验内容........................................................................................................................44.1.实验基本功能:在linux下用C语言编写,实现如下功能:............................44.2主要代码编写:.......................................................................................................44.2.1、实现服务器功能的主要代码编写:........................................................44.2.2、实现客户端功能的主要代码编写............................................................13五实验内容运行结果........................................................................................................205.1实验简介.................................................................................................................205.2用make编译源文件从而产生可执行文件.........................................................215.3运行服务器文件server..........................................................................................215.4在另外一个终端运行客户端文件client...............................................................215.5退出一步在文件夹外建立一个文件tmpftp.........................................................225.6重新运行客户端,并下载文件tmpftp.................................................................225.7重新启动客户端,并上传文件tmpftp.................................................................225.8服务器端的运行情况.............................................................................................22六、实验总结......................................................................................................................23嘉应学院计算机学院LINUX系统综合性实验报告-3-一、实验目的按照教学计划,本课程是在高级语言程序设计、数据结构、计算机网络等课程之后开设的。要求初步掌握TCP/IP协议的体系结构;掌握网络编程开发流程;掌握基本的网络程序的编写方法,培养分析问题和解决问题的能力。二、实验内容与要求实验内容:本课程的实验是一个综合性设计实验:基于linux的FTPServer+client,通过本实验主要检验学生对TCP/IP网络协议的了解,阅读RFC959,熟悉ftp协议;进一步加强对C语言及linux系统调用的掌握,本实验涉及到:linux系统、GCC、GDB、VI、linuxsocket网络编程、文件操作、流传输、进程控制与进程通信、存储管理、多线程技术等多方面专业知识的综合掌握情况。实验要求:1开发平台:ubuntu11.04+vi+gcc2、要求:1)下载并认真阅读RFC959,了解FTP的具体内容、功能及标准;2)实现FTP服务的基本功能,如获取目录内容、上传、下载、用户管理、文件管理、匿名登录等:3)尽力实现扩展功能,如断点续传等。三、主要仪器设备1、已连接网络的计算机。2、所使用的计算机安装了ubuntu版本的linux系统。嘉应学院计算机学院LINUX系统综合性实验报告-4-四、实验内容4.1.实验基本功能:在linux下用C语言编写,实现如下功能:数据的上传、下载4.2主要代码编写:Linux系统下,用文本编辑器编写ftp客户端与服务器端的C语言代码,另外几个包含的头文件。下面是在ftp客户端和服务器功能实现中比较重要的代码。4.2.1、实现服务器功能的主要代码编写:Main主函数定义一些相关的变量等代码:intmain(intargc,char**argv){intsockfd;intclientfd;uint16_tport;intret;pid_tpid;structsockaddr_inserver_addr;if(2!=argc){printf(usage:commandlisten_port\n);return-1;}port=atoi(argv[1]);服务器端客户端嘉应学院计算机学院LINUX系统综合性实验报告-5-server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=INADDR_ANY;server_addr.sin_port=htons(port);sockfd=socket(PF_INET,SOCK_STREAM,0);if(sockfd0){perror(opendatastreamsocketfailed!\n);return-1;}ret=bind(sockfd,(structsockaddr*)&server_addr,sizeof(server_addr));if(ret0){perror(binddatasocketfailed!\n);return-1;}ret=listen(sockfd,SOMAXCONN);if(ret0){perror(listeningdatastreamfailed!\n);return-1;}printf(正在等待客户端到链接...\n);while(1){clientfd=accept(sockfd,NULL,NULL);if(clientfd0)嘉应学院计算机学院LINUX系统综合性实验报告-6-{perror(acceptdataconnectionerror!\n);return-1;}pid=fork();if(pid0){perror(forkerror!\n);}if(0==pid){//chidprocessprintf(oneclientcome...\n);serv_client(clientfd);return0;}close(clientfd);}}处理服务器的请求inthandle_request(msg_head_ctrl_t*msg,intsockfd);voidserv_client(intsockfd){msg_head_ctrl_t*msg;ssize_tsize;;uint32_tbody_len;uint32_ttotal_len;intret;fd_setfs_client;structtimevaltimeout;等待服务器请求嘉应学院计算机学院LINUX系统综合性实验报告-7-while(1){FD_ZERO(&fs_client);FD_SET(sockfd,&fs_client);timeout.tv_sec=DEFAULT_TIME_OUT;timeout.tv_usec=0;ret=select(sockfd+1,&fs_client,NULL,NULL,&timeout);if(0==ret){//timeoutprintf(timeout....\n);return;}if(-1==ret){continue;}接收服务器的请求信息size=recv(sockfd,&body_len,sizeof(uint32_t),MSG_PEEK);if(size0){printf(recvmsgerror!\n);return;}if(size==0){printf(clientclosetheconnection\n);return;}转换网络字节为本地字节total_len=ntohl(body_len)+sizeof(msg_head_ctrl_t);msg=malloc(total_len+1);if(NULL==msg){printf(mallocerror!\n);嘉应学院计算机学院LINUX系统综合性实验报告-8-return;}memset(msg,0,total_len+1);size=recv(sockfd,msg,total_len,0);if(size!=total_len){printf(recvmsgbodyfailed!\n);return;}msg-body_len=ntohl(msg-body_len);msg-command=ntohl(msg-command);//printf(len=%d,msg=%s\n,msg-body_len,msg-msg_body);如果服务器出现quit的时候就推出if(COMMAND_QUIT==msg-command){printf(clientclosedconnection!\n);close(sockfd);return;}处理下载请求ret=handle_request(msg,sockfd);if(SOCK_ERROR==ret){return;}free(msg);}}处理客户端的下载inthandle_get(msg_head_ctrl_t*msg,intsockfd)嘉应学院计算机学院LINUX系统综合性实验报告-9-{intfd;intret;boolexist;uint32_tbody_len;msg_head_ctrl_t*ack_msg;ssize_tread_bytes;ssize_tsent_bytes;检查所需下载的文件
本文标题:linux-C-FTP-实验报告
链接地址:https://www.777doc.com/doc-4341075 .html