网络程序综合设计模拟FTP实现.docx_第1页
网络程序综合设计模拟FTP实现.docx_第2页
网络程序综合设计模拟FTP实现.docx_第3页
网络程序综合设计模拟FTP实现.docx_第4页
网络程序综合设计模拟FTP实现.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

综合设计1 模拟FTP设计学时:4设计类型:综合设计要求:必修一、设计目的: 1、了解FTP传输原理; 2、了解服务器端程序与客户端程序功能的区别,学会编制服务器端和客户端程序以模拟FTP功能。二、设计内容:利用winsock提供的相关函数进行控制台程序的编制,要求分别编制服务器端和客户端程序以模拟FTP功能,并将模拟结果显示在DOS窗口上。 三、设计原理、方法和手段 使用Winsock进行网络通信程序的设计,要通过本次试验了解如何创建与使用流套接字,并充分了解FTP协议传输数据的原理,为以后自己编制类似的程序打下良好的基础。四、设计组织运行要求注意观察结果,记录并分析编译系统的出错信息提示。五、设计条件Pc机VC+ 6.0环境六、设计步骤1. 启动Visual C+6.0开发环境从“开始”菜单中选择“程序| Microsoft Visual Studio 6.0 | Microsoft Visual C+ 6.0”,显示Visual C+6.0开发环境窗口。2. 创建一个项目(服务器端项目)(1)单击File菜单中的New选项,显示New(新建)对话框。(2)单击Project(项目)标签,在Project选项卡中,选择Win32 Console Application(Win32控制台应用程序向导)。在Location(位置)文本框中指定一个路径,在Project Name(项目名称)文本框中为项目输入一个名字(例如:lab4.1),单击OK按钮。(3)依据提示单击下一步按钮,直到最后一步点击完成按钮,完成项目的建立。(4)项目建立好后,点击工程菜单,选择设置,在弹出的新窗口中单击连接(Link)选项卡,在对象/库模块文本框中填入wsock32.lib库,点击确定按钮,完成库的添加(或者不做此步,直接到程序里用预编译指令将wsock32.lib库添加进来)。3.编写服务器端源程序文件参考程序见资料p.96 (注意理解实现原理) 4.建立并运行可执行程序(1)选择菜单命令Build | Build lab4.1.exe,建立可执行程序。如果你正确输入了源程序,此时便成功地生成了可执行程序(例如:lab4.1.exe)。如果程序有语法错误,则屏幕下方的状态窗口中会显示错误信息,根据这些错误信息对源程序进行修改后,重新选择菜单命令Build | Build lab4.1.exe,建立可执行程序。(2)选择菜单命令Build | Execute lab4.1.exe运行程序,观察屏幕的显示内容。5建立一个新项目(客户端程序),重复2到4步。 6服务器端和客户端程序编制完毕后,(1)先在编译器内运行服务器端工程文件,注意此时服务器端程序窗口的显示内容,不要关闭该窗口。(2)找到客户端程序所在文件夹下的Debug文件夹,进入该文件夹运行里面的客户端程序可执行文件,可以看到客户端程序窗口,注意此时该窗口的显示内容(此时屏幕上应有两个结果窗口,一个是服务器端的,另一个是客户端的),将两个截图写在报告上并说明原因。(3)在客户端窗口输入一个要打开的文本文件名(绝对路径),回车观察结果窗口的改变,将变化截图写在报告上并说明原因。(4)到任意目录下新建一个文本文档(最好名字为全字母),在文档中输入任意内容并保存。(5)回到客户端程序结果显示窗口,重新输入你刚才建立好的文本文档名(绝对路径),回车,观察程序运行结果,如果程序出错,请修改程序(利用跟踪调试),程序能正确运行后,将两个窗口的截图写在报告上,并说明改变原因。七、思考题在服务器端打开文档并写入后,会覆盖掉客户端传过来文档的内容,想想看能不能将客户端传来的数据保留下来,再在服务器端写入,让客户端和服务器端数据都保存下来。八、设计报告分别记录下以上每个设计内容的结果,并分析结果。 在每次设计后,应整理出设计报告,设计报告应包括以下内容: 题目; 程序清单:每个上机程序的完整源程序代码; 运行结果:每个上机程序运行后打印输出的结果; 对运行情况所作的分析,以及本次调试程序所取得的经验。如果程序未能通过,则分析其原因。 九、其它说明(无) 服务端#include #include #include #pragma comment(lib,wsock32.lib) #define MAX_FILESIZE 32*1024 #define RECV_PORT 2000#define SEND_PORT 3000SOCKET ServerSock,ClientSock; sockaddr_in ServerAddr,ClientAddr; /FILEDATA DataPacket; struct Filedata char ffname30; char ffdataMAX_FILESIZE; int len; DataPacket; int Addrlen; DWORD StartSocket() WSADATA WSAData;if(WSAStartup(MAKEWORD(2,2),&WSAData) != 0) printf(Socket init fail!n); return (-1); return (1); DWORD CreateSocket() ServerSock = socket(AF_INET,SOCK_STREAM,0); if(ServerSock = SOCKET_ERROR) printf(Socket create fail!n); WSACleanup(); return (-1); ServerAddr.sin_family = AF_INET; ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY); ServerAddr.sin_port = htons(RECV_PORT); if(bind(ServerSock,(structsockaddr*)(&ServerAddr),sizeof(struct sockaddr)= SOCKET_ERROR) printf(Bind is this error!n); /closesocket(ServerSock); / WSACleanup(); return (-1); return (1); DWORD WriteFile(char *fname,char *fdata,int flen) int i = 0; FILE *fp ; fp = fopen(fname,w); if(fp = NULL) printf(Cannot open the file : %s !n,fname); /return FALSE; for(i=0;i flen; i+) fputc(fdatai,fp); fclose(fp); return (1); DWORD ConnectProcess() Addrlen = sizeof(sockaddr_in); if(listen(ServerSock,5) 0) printf(Listen error!n); /closesocket(ServerSock); /WSACleanup(); return (-1); printf(Waiting .n); for(;) ClientSock = accept(ServerSock,(struct sockaddr FAR*)(&ClientAddr),&Addrlen); for(;) memset(DataPacket.ffname,0,30); memset(DataPacket.ffdata,0,MAX_FILESIZE); DataPacket.len = 0; if(recv(ClientSock,(char *)&DataPacket,sizeof(DataPacket),0) = 0) break; printf(Has Receive file :%s ,length is %d ,DataPacket.ffname,DataPacket.len); WriteFile(DataPacket.ffname,DataPacket.ffdata,DataPacket.len); printf(n); /return TRUE; int main() if(StartSocket() = -1) return (-1); if(CreateSocket() = -1) return(-1); if(ConnectProcess() = -1) return(-1); / closesocket(ServerSock); /closesocket(ClientSock); /WSACleanup(); return (1); 客户端#include #include #include #include#include#pragma comment(lib,wsock32.lib) #define RECV_PORT 2000 #define SEND_PORT 3000#define MAX_FILESIZE 32*1024 SOCKET ServerSock; /FILENAME DataPacket; sockaddr_in ServerAddr;struct Filedata char ffname30; char ffdataMAX_FILESIZE; int len; DataPacket; DWORD StartSocket() WSADATA WSAData;if(WSAStartup(MAKEWORD(2,2),&WSAData) != 0) printf(Socket init fail!n); return (-1); ServerAddr.sin_family = AF_INET; ServerAddr.sin_addr.s_addr = inet_addr(); ServerAddr.sin_port = htons(RECV_PORT); return (1); DWORD CreateSocket() ServerSock = socket(AF_INET,SOCK_STREAM,0); if(ServerSock = SOCKET_ERROR) printf(Socket Create fail!n); WSACleanup(); return (-1); return (1); void CallServer() CreateSocket(); while(connect(ServerSock,(struct sockaddr*)(&ServerAddr),sizeof(ServerAddr)=SOCKET_ERROR);printf(Linkingn); DWORD GetFile(char *fname) FILE *fp; int i = 0,Filesize = 0,count,total = 0; /char c; char buffer100; char SenddataMAX_FILESIZE; if(fp = fopen(fname,r) = NULL) printf(Cannot open this file : %s !n,fname); return (0); memset(Senddata,0,MAX_FILESIZE); while(!feof(fp) count = fread(buffer,sizeof(char),100,fp); if(ferror(fp) printf(Read error!n); break; Filesize += count; if(Filesize MAX_FILESIZE) printf(You file is too big!n); fclose(fp); return (0); memcpy(&Senddatai,buffer,count); i += count; fclose(fp); Senddatai = 0; strcpy(DataPacket.ffname,fname); memcpy(DataPacket.ffdata,Senddata,Filesize); DataPacket.len = Filesize; printf(%s %d !n,DataPacket.ffname,DataPacket.len); return (1); DWORD TCPSendPacket(struct Filedata Packet) int length = send(ServerSock,(char *)&Packet,sizeof(DataPacket),0); if(length = 0) printf(Send filePacket fail!n); closesocket(ServerSock); WSACleanup(); return (-1); return (1); int main() char sendfilename30; /char c; StartSocket(); CallServer

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论