资源描述:
《linux网络编程课程设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、安徽工业大学计算机科学与技术学院《Linux网络编程》课程设计班级:姓名:指导老师:安徽工业大学计算机科学与技术学院一、设计背景 Linux 操作系统作为一个开源的操作系统被越来越多的人所应用,它的好处在于操作系统源代码的公开化!只要是基于GNU公约的软件你都可以任意使用并修改它的源代码。通过这次课程设计能更好的学习网络编程知识和掌握LINUX平台上应用程序设计开发的过程,将大学四年所学知识综合运用,为未来的工作学习打下基础。二、设计目的1、学习epoll跟FTP被动模式2、掌握linux基本命令,例如ls、cd、login;3、学会如何编译、运
2、行三、环境要求1、centos64位操作系统2、gcc编译器四、设计原理4.1客户端客户端程序的主要任务有以下3个:(1)、分析用户输入的命令。(2)、根据命令向服务器发出请求(3)、接受服务器返回请求的结果客户端为用户提供了3种命令:(1)、get:从服务器下载文件(2)、list:列出客户端当前目录的内容(3)、quit离开4.2服务器端(1)、分析请求代码。(2)、根据请求代码做相应的处理(3)、等待返回结果或者应答信息安徽工业大学计算机科学与技术学院五、软件测试结果安徽工业大学计算机科学与技术学院安徽工业大学计算机科学与技术学院六、部分主
3、代码#include"ftserve.h"intmain(intargc,char*argv[]){intsock_listen,sock_control,port,pid;if(argc!=2){printf("usage:./ftserveport");exit(0);}port=atoi(argv[1]);//createsocketif((sock_listen=socket_create(port))<0){perror("Errorcreatingsocket");exit(1);}while(1){//waitforclient
4、request安徽工业大学计算机科学与技术学院//createnewsocketforcontrolconnectionif((sock_control=socket_accept(sock_listen))<0)break;//createchildprocesstodoactualfiletransferif((pid=fork())<0){perror("Errorforkingchildprocess");}elseif(pid==0){close(sock_listen);ftserve_process(sock_control);cl
5、ose(sock_control);exit(0);}close(sock_control);}close(sock_listen);return0;}/***Sendfilespecifiedinfilenameoverdataconnection,sending*controlmessageovercontrolconnection*Handlescaseofnullorinvalidfilename*/voidftserve_retr(intsock_control,intsock_data,char*filename){FILE*fd=N
6、ULL;chardata[MAXSIZE];size_tnum_read;fd=fopen(filename,"r");if(!fd){//senderrorcode(550Requestedactionnottaken)send_response(sock_control,550);}else{//sendokay(150Filestatusokay)安徽工业大学计算机科学与技术学院send_response(sock_control,150);do{num_read=fread(data,1,MAXSIZE,fd);if(num_read<0
7、){printf("errorinfread()");}//sendblockif(send(sock_data,data,num_read,0)<0)perror("errorsendingfile");}while(num_read>0);//sendmessage:226:closingconn,filetransfersuccessfulsend_response(sock_control,226);fclose(fd);}}/***Sendlistoffilesincurrentdirectory*overdataconnect
8、ion*Return-1onerror,0onsuccess*/intftserve_list(intsock_data,intsock