资源描述:
《linux网络编程课程设计.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
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);}whi
4、le(1){//waitforclientrequest安徽工业大学计算机科学与技术学院//createnewsocketforcontrolconnectionif((sock_control=socket_accept(sock_listen))<0)break;//createchildprocesstodoactualfiletransferif((pid=fork())<0){perror("Errorforkingchildprocess");}elseif(pid==0){close(sock_listen);ftse
5、rve_process(sock_control);close(sock_control);exit(0);}close(sock_control);}close(sock_listen);return0;}/***Sendfilespecifiedinfilenameoverdataconnection,sending*controlmessageovercontrolconnection*Handlescaseofnullorinvalidfilename*/voidftserve_retr(intsock_control,in
6、tsock_data,char*filename){FILE*fd=NULL;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_r
7、ead=fread(data,1,MAXSIZE,fd);if(num_read<0){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);}}/***
8、Sendlistoffilesincurrentdirectory*overdataconnection*Return-1onerror,0onsuccess*/intftserve_list(intsock_data,intsock