课程设计任务书
学生姓名:专业班级:
指导教师:工作单位:信息工程学院
题目:文件传输协议的设计与实现
初始条件:
Windows XP
C++,SOCKET
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.掌握TCP/IP 网络应用程序基本的设计方法;
2.用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c);
3.撰写课程设计说明书。装订后的课程设计说明书不少于10面(含封面、任务书、目录、正文、参考文献、成绩评定表、封底)。
时间安排:
6月18日查阅资料、方案论证
6月19日方案设计、调试
6月20日撰写课程设计说明书
6月21日答辩
指导教师签名:年月日
系主任(或责任教师)签名:年月日
运行正确的程序::
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);
}
/*MAX_PATH是C语言运行时库中通过#define指令定义的一个宏常量,它定义了编译器所支持的最长全路径名的长度。
在VC++6.0中,_MAX_PATH的值为260。
*/
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";
cout<<"list file error!"< if(send(datatcps,errstr,strlen(errstr),0)==SOCKET_ERROR) { cout<<"error occurs when sending file list!"<