1 / 17
文档名称:

FTP协议实验报告(共17页).docx

格式:docx   大小:49KB   页数:17页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

FTP协议实验报告(共17页).docx

上传人:miao19720107 2022/4/6 文件大小:49 KB

下载得到文件列表

FTP协议实验报告(共17页).docx

文档介绍

文档介绍:精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
FTP协议实验报告
实验目的
1、在Lo:用来将sockaddr_in结构填充到与struct sockaddr同样的长度,可以用bzero()或memset()函数将其置为零。
使用bind函数时,可以用下面的赋值实现自动获得本机IP地址和随机获取一个没有被占用的端口号:
   = 0; /* 系统随机选择一个未被使用的端口号 */
   = INADDR_ANY; /* 填入本机IP地址 */
,函数会自动为你选择一个未占用的端口来使用。同样,,系统会自动填入本机IP地址。
Bind()函数在成功被调用时返回0;出现错误时返回"-1"并将errno置为相应的错误号。需要注意的是,在调用bind函数时一般不要将端口号置为小于1024的值,因为1到1024是保留端口号,你可以选择大于1024中的任何一个没有被占用的端口号。
(4)连接建立
无连接协议从不建立直接连接。面向连接的服务器也从不启动一个连接,它只是被动的在协议端口监听客户的请求。
Listen函数使socket处于被动的监听模式,并为该socket建立一个输入数据队列,将到达的服务请求保存在此队列中,直到程序处理它们。
int listen(int sockfd, int backlog);
Sockfd: Socket系统调用返回的socket 描述符
backlog:指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待accept()。如果一个服务请求到来时,输入队列已满,该socket将拒绝连接请求,客户将收到一个出错信息。
返回:当出现错误时listen函数返回-1,并置相应的errno错误码。
accept()函数让服务器接收客户的连接请求。在建立好输入队列后,服务器就调用accept函数,然后睡眠并等待客户的连接请求。
   int accept(int sockfd, void *addr, int *addrlen);
sockfd:被监听的socket描述符;
addr:通常是一个指向sockaddr_in变量的指针,该变量用来存放提出连接请求服务的主机的信息(某台主机从某个端口发出该请求);
addrten:通常为一个指向值为sizeof(struct sockaddr_in)的整型指针变量;
返回:出现错误时accept函数返回-1并置相应的errno值。
(5)结束传输
精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
  当所有的数据操作结束以后,你可以调用close()函数来释放该socket,从而停止在该socket上的任何数据操作:close(sockfd);
实验内容
在Linux系统上使用Socket接口实现FTP客户端 和服务器的程序,使客户端可以连接至服务器,并且可以进行一些FTP的基本操作,如列出目录、下载文件等。从FTP协议的实现角度来看,客户端 与服务器的命令通道和数据通道需要分享,同时应该支持以下一些FTP命令:
get:取远方的一个文件。
put:传给远方一个文件。
pwd:显示远方当前目录。
dir:列出远方当前目录。
cd:改变远方当前目录。
?:显示你提供的命令
quit:退出返回
实验过程
1、实现服务器端
(1)全局变量
为了记录缓冲区大小、当前目录、当前工作路径、帮助信息而定义了以下几个全局变量:
#define dataLen 1024 //缓冲区大小
char currentDirPath[200]; //当前工作目录的绝对路径
char currentDirName[30]; //当前目录的名称
char help[]="get get a file from server\n
put upload a file to server\n
pwd display the current directory of server\n
dir display th