当前位置:文档之家› 实验一-文件传输协议设计要点

实验一-文件传输协议设计要点

实验一:文件传输协议的设计与实现

目录

1.实验设计目的和要求

2.背景知识

3.课程设计分析

4.程序清单

5.运行结果

6.总结

1.课程设计目的和要求

文件传输是各种计算机的网络的基本功能,文件传送协议是一种最基本的应用层协议。它是按照客户或服务器模式进行的工作,提供交式的访问。是INTERNRT使用最广泛的协议之一。以及深入了解计算机网络是建立在TCP/IP网络体系结构上。

用 socket 编程接口编写俩个程序,分别为客户程序和服务器程序

1.掌握TCP/IP 网络应用程序基本的设计方法;

2.用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c);

3.撰写课程设计说明书。装订后的课程设计说明书不少于10面(含封面、任务书、目录、正文、参考文献、成绩评定表、封底)。

2.背景知识

第一个FTP的RFC由A.K.Bhushan 在1971年提出,同时由MIT 与Harvard实验实现,RFC 172提供了主机间文件传输的一个用户级协议。长期发展过程由于底层协议从NCP改变为TCP,RFC765定义了采用TCP的FCP.

FTP协议在今天已经发展成熟,应用也越来越广很多开发的比较成熟的FTP 客户端软件已经得到了广泛的应用.

3.课程设计分析

Server端Client端

创建ServerSocket对象,在某端口提供监听服务Client端

等待来自Client端的服务请求

接受Client端的请求,用返回的创建Socket对象,向Server

Socket建立连接的监听端口请求

通过向Socket中读写数据来通过向新的Socket中读写数

与Client端通信据来与Server端通信

关闭Socket,结束与Server端的通信关闭Socket,结束与当前

Client的通信,等待其他请求

关闭ServerSocket对象,结束监听服务

4.程序清单:

1.服务器源代码:

#include

#include

#include

using namespace std;

#pragma comment(lib, "wsock32.lib")

#define PORT 4523

char buf_send[1024];

char buf_rec[1024];

SOCKET sockSrv;

//socket初始化

DWORD CreateSocket()

{

WSADATA WSAData;//WSADATA结构被用来保存函数WSAStartup返回的Windows Sockets初始化信息if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)//WSAStartup完成winsock的初始化

{printf("socket initialize failed!\n");

return (-1);

}

sockSrv=socket(AF_INET,SOCK_STREAM,0);//定义为面向连接的,返回值送给sockSrv

if(sockSrv==SOCKET_ERROR)

{

printf("socket create failed ! \n");

WSACleanup();//中止Windows Sockets DLL的使用

return(-1);

}

SOCKADDR_IN addrSrv;//TCP/IP使用SOCKADDR_IN 定义地址

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//计算机IP地址

addrSrv.sin_port=htons(PORT);//协议端口号

addrSrv.sin_family=AF_INET;//地址所属协议簇

//绑定端口

if(bind(sockSrv,(struct sockaddr FAR *)&addrSrv,sizeof(addrSrv))==SOCKET_ERROR)

{

printf("Bind Error");

return(-1);

}

return (1);

}

int SendFileRecord(SOCKET datatcps,WIN32_FIND_DATA *pfd)//用于回复给客户端

{

char filerecord[MAX_PATH+32];

FILETIME ft;

FileTimeToLocalFileTime(&pfd->ftLastWriteTime,&ft);//将一个FILETIME结构转换成本地时间SYSTEMTIME lastwtime;//系统时间

FileTimeToSystemTime(&ft,&lastwtime);//根据一个FILETIME结构的内容,装载一个SYSTEMTIME 结构

char *dir=pfd->dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY?"

":" ";

sprintf(filerecord,"%04d-%02d-%02d %02d:%02d %5s %10d %-20s\n",

lastwtime.wYear,

lastwtime.wMonth,

lastwtime.wDay,

lastwtime.wHour,

lastwtime.wMinute,

dir,

pfd->nFileSizeLow,

pfd->cFileName);

if(send(datatcps,filerecord,strlen(filerecord),0)==SOCKET_ERROR)//发送回复失败

{

printf("Error occurs when sending file list!\n");

return 0;

}

return 1;

}

//发送主机文件目录

int SendFileList(SOCKET datatcps)

{

HANDLE hff;

WIN32_FIND_DATA fd; //获取和更改文件属性

hff=FindFirstFile("*",&fd);//搜索文件

if(hff==INVALID_HANDLE_VALUE)//搜索无效返回值

{

const char *errstr="can't list files!\n";

相关主题