1、. . .Linux网络编程课程设计班级:姓名:指导老师:一、设计背景Linux操作系统作为一个开源的操作系统被越来越多的人所应用,它的好处在于操作系统源代码的公开化!只要是基于GNU公约的软件你都可以任意使用并修改它的源代码。通过这次课程设计能更好的学习网络编程知识和掌握LINUX平台上应用程序设计开发的过程,将大学四年所学知识综合运用,为未来的工作学习打下基础。二、设计目的1、学习epoll 跟FTP被动模式2、掌握linux基本命令 ,例如ls、cd、login;3、学会如何编译、运行三、环境要求1、centos 64位操作系统2、gcc编译器四、设计原理41客户端 客户端程序的主要任务
2、有以下3个: 1、分析用户输入的命令。 2、根据命令向服务器发出请求 3、接受服务器返回请求的结果 客户端为用户提供了3种命令: 1、get:从服务器下载文件 2、list:列出客户端当前目录的内容3、quit离开4.2 服务器端1、分析请求代码。 2、根据请求代码做相应的处理 3、等待返回结果或者应答信息五、软件测试结果六、部分主代码#include ftserve.hint mainint sock_listen, sock_control, port, pid;if printf;exit;port = atoi;/ create socketif sock_listen = socke
3、t_create perror;exit;while / wait for client request/ create new socket for control connectionif sock_control = socket_acceptbreak;/ create child process to do actual file transferif pid = fork perror; else if close;ftserve_process;close;exit;close;close;return 0;/* * Send file specified in filename
4、 over data connection, sending * control message over control connection * Handles case of null or invalid filename */void ftserve_retrFILE* fd = NULL;char dataMAXSIZE;size_t num_read;fd = fopen;if / send error code send_response; else / send okay send_response;do num_read = fread;if num_read printf
5、error in freadn;/ send blockif send perror; while 0;/ send message: 226: closing conn, file transfer successfulsend_response;fclose;/* * Send list of files in current directory * over data connection * Return -1 on error, 0 on success */int ftserve_listchar dataMAXSIZE;size_t num_read;FILE* fd;int r
6、s = system tmp.txt;if rs exit;fd = fopen;if exit;/* Seek to the beginning of the file */fseek;send_response; /startingmemset;while num_read = fread 0 if send perror;memset;fclose;send_response;/ send 226return 0;/* * Open data connection to client * Returns: socket for data connection * or -1 on err
7、or */int ftserve_start_data_connchar buf1024;int wait, sock_data;/ Wait for go-ahead on control connif recv perror;return -1;/ Get client addressstruct sockaddr_in client_addr;socklen_t len = sizeof client_addr;getpeernamesock_control, &client_addr, &len;inet_ntopAF_INET, &client_addr.sin_addr, buf,
8、 sizeof;/ Initiate data connection with clientif sock_data = socket_connect return -1;return sock_data;/* * Authenticate a users credentials * Return 1 if authenticated, 0 if not */int ftserve_check_userchar usernameMAXSIZE;char passwordMAXSIZE;char *pch;char bufMAXSIZE;char *line = NULL;size_t num_
9、read;size_t len = 0;FILE* fd;int auth = 0;fd = fopen;if perror;exit;while num_read = getline != -1 memset;strcpy;pch = strtok ;strcpy;if pch = strtok ;strcpy;/ remove end of line and whitespacetrimstrpassword, strlen;if strcmp=0 & strcmp=0 auth = 1;break;free;fclose;return auth;/* * Log in connected
10、 client */int ftserve_loginchar bufMAXSIZE;char userMAXSIZE;char passMAXSIZE;memset;memset;memset;/ Wait to recieve usernameif recv_datasock_control, buf, sizeof = -1 perror; exit;int i = 5;int n = 0;while usern+ = bufi+;/ tell client were ready for passwordsend_response;/ Wait to recieve passwordme
11、mset;if recv_datasock_control, buf, sizeof = -1 perror; exit;i = 5;n = 0;while passn+ = bufi+;return ftserve_check_user;/* * Wait for command from client and * send response * Returns response code */int ftserve_recv_cmdint rc = 200;char bufferMAXSIZE;memset;memset;memset;/ Wait to recieve commandif
12、 recv_datasock_control, buffer, sizeof = -1 perror; return -1;strncpy;char *tmp = buffer + 5;strcpy;if strcmp=0 rc = 221; else ifstrcmp=0 | strcmp=0 |strcmp=0 | strcmp=0 rc = 200; else /invalid commandrc = 502;send_response;return rc;/* * Child process handles connection to client */void ftserve_pro
13、cessint sock_data;char cmd5;char argMAXSIZE;/ Send welcome messagesend_response;/ Authenticate userif ftserve_login = 1 send_response; else send_response;exit;while / Wait for commandint rc = ftserve_recv_cmd;if rc | break;if / Open data connection with clientif sock_data = ftserve_start_data_conn close;exit; / Execute commandif strcmp=0 / Do listftserve_list; else if strcmp=0 / Do get ftserve_retr;/ Close data connectionclose; 七、设计总结通过本次的linux程序与设计课程设计让我们学会使用linux系统和socket,极大的丰富了linux系统下编程和网络方面的知识,锻炼了动手能力,为以后的工作学习打下了坚实的基础。13 / 13