教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 文秘资料 >

TCP_IP课程设计报告

来源:网络收集 时间:2026-07-31
导读: ftp协议 《TCP/IP课程设计》 报告 指导教师 专业班级 学 号 姓 名 ftp协议 1. 设计目的: 文件传输是应用层中的一个主要协议,负责将主机中的文件从一台机器传送到另一台机器。文件传输协议FTP采用客户/服务器的工作模式,由客户端产生操作要求,服务器接收

ftp协议

《TCP/IP课程设计》

报告

指导教师

专业班级 学 号 姓 名

ftp协议

1. 设计目的:

文件传输是应用层中的一个主要协议,负责将主机中的文件从一台机器传送到另一台机器。文件传输协议FTP采用客户/服务器的工作模式,由客户端产生操作要求,服务器接收到该请求后返回响应。

此次课程设计的目的是通过对课程所学相关知识的实践,加深对TCP/IP socket编程原理的理解,熟练对TCP/IP socket编程方法和技巧的掌握。

2.功能描述:

采用Client/Server模式实现ftp功能:

1)客户端:

客户端利用用户名、口令登录

客户端能够以控制台方式浏览服务器目录及文件(ls, cd); 完成与FTP用户的人机界面,以命令的方式向服务器请求服务; 2)服务器端: 允许用户登录服务器;

接收客户端的命令请求并能够并发的实现上传(put)、下载(get)文件服务;

3设计原理:

服务器端通过socket()系统调用创建一个Socket,与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。如果有客户端连接请求,则通过系统调用accept()将客户端地址赋给这个Socket。然后等待客户登录,若有客户成功登录则利用系统调用fork()创建子进程并发的为客户提供ftp服务。客户端程序相对简单,只需要建立一个Socket与系统调用connect()与服务器端连接,然后成功登录后通过这个Socket来发送ftp服务请求和接收数据就可以了。

4.系统详细设计:

1)服务器端:

a.程序流程图:

ftp协议

b.数据结构设计:

在服务器端定义了5个全局变量:

#define BUFSIZE 1024 //每次传送文件大小 #define QLEN 20 //监听队列允许最大数目 char inbuf[BUFSIZE+1]; //输入缓冲大小 char outbuf[BUFSIZE+1]; //输出缓冲大小

unsigned int inlen,outlen; //inbuf及outbuf的长度

在每次传输报文件前加了一个结构体变量,标识了传送文件大小,本次传送大小,已传送了多少及这是这个文件传送的第几次。 typedef struct fileheadnode{

unsigned long filesize;//文件大小。

unsigned long nowfilelen;//当前文件以发送大小。

ftp协议

unsigned long clen;//此次发送数据大小。 unsigned long ctimes;//此次是发送的第几次。

}filehead; c.函数功能描述: 1)int logined(int cl_soc);

这个函数用来允许客户登录到服务器,如果客户端登录名及密码均正确,则登录成功,反之,登录失败。 int ftpserver(int cl_soc);

此函数用来实现循环接受客户端请求,并根据请求调用相关函数实现服务功能。 int get(int cl_soc,char (*comv)[50]); get函数的作用是处理客户端的下载请求。 int put(int cl_soc,char (*comv)[50]); put函数的作用是处理客户端的上传请求。 int ls(int cl_soc,char (*comv)[50]); ls()函数允许客户端遍历服务器端文件 int cd(int cl_soc,char (*comv)[50]);

函数cd()的作用是打开服务器的文件目录。

C.服务器端代码: #include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include <stdlib.h> #include<string.h> #include<unistd.h> #include <netdb.h> #include <stdlib.h> #include <dirent.h> #include<sys/stat.h>

ftp协议

#define BUFSIZE 1024 #define QLEN 20 char inbuf[BUFSIZE+1]; char outbuf[BUFSIZE+1]; unsigned int inlen,outlen; char comv[3][50]; char file[50];

typedef struct fileheadnode{

unsigned long filesize;//文件大小。

unsigned long nowfilelen;//当前文件以发送大小。 unsigned long clen;//此次发送数据大小。 unsigned long ctimes;//此次是发送的第几次。

}filehead; filehead header;

int logined(int cl_soc); int ftpserver(int cl_soc);

int get(int cl_soc,char (*comv)[50]); int put(int cl_soc,char (*comv)[50]); int ls(int cl_soc,char (*comv)[50]); int cd(int cl_soc,char (*comv)[50]);

int main(int argc,char *argv[]) {

int sev_soc,cl_soc;

unsigned int sev_len,cl_len; char *service="21";

unsigned short portbase = 0;

ftp协议

int n=0,len=0;

struct sockaddr_in sev_addr,cl_addr; switch (argc) { case

1:

break;

2:

case

service = argv[1]; break;

default: }

printf("usage: tcpftp [port]\n");

memset(&sev_addr, 0, sizeof(sev_addr)); inlen=sizeof(inbuf); outlen=sizeof(outbuf);

sev_addr.sin_family=AF_INET;

sev_addr.sin_addr.s_addr=INADDR_ANY; if ( pse = getservbyname(service,"tcp") )

sev_addr.sin_port = htons(ntohs((unsigned short)pse->s_port) + portbase);

else if ((sev_addr.sin_port=htons((unsigned short)atoi(service))) == 0)

printf("can't get service entry\n");

sev_soc=socket(PF_INET,SOCK_STREAM,0); sev_len=sizeof(sev_addr);

bind(sev_soc,(struct sockaddr *)&sev_addr,sev_len);

ftp协议

while(1) {

cl_len=sizeof(cl_addr);

cl_soc=accept(sev_soc,(struct sockaddr *)&cl_addr,&cl_len); if (logined(cl_soc)!=0) { }

(void) close(cl_soc); continue;

printf("\n---------an user in-----------\n");

switch (fork()) { case 0:

/* child */

close(sev_soc);

ftpserver(cl_soc);

}

printf("\n---------an user out-----------\n"); return 0;

default: /* parent */

(void) close(cl_soc); break;

case -1: }

//close(cl_soc);

printf("\n-------------fork error -----------\n");

ftp协议

}

return 0;

int logined(int cl_soc) { }

int ftpserver(int cl_soc) {

char user[2][20]; memset(outbuf,0,outlen); memset(user,0,sizeof(user));

strcpy(outbuf,"Please enter UserName and PassWord:\n"); write(cl_soc,outbuf,strlen(outbuf)); read(cl_soc,user,sizeof(user));

if (strcmp(user[0],"123")==0&&strcmp(user[1],"123")==0) { } else { }

memset(outbuf,0,outlen);

strcpy(outbuf,"UserName or PassWord error\n"); write(cl_soc,outbuf,strlen(outbuf)); return -1;

memset(outbuf,0,outlen); strcpy(outbuf,"success\n"); write(cl_soc,outbuf,strlen(outbuf)); return 0;

ftp协议

strcpy(file,"/root/ftp/"); int …… 此处隐藏:5579字,全部文档内容请下载后查看。喜欢就下载吧 ……

TCP_IP课程设计报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/1995414.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)