您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 招标投标 > 网络程序综合设计模拟FTP实现
综合设计1模拟FTP设计学时:4设计类型:综合设计要求:必修一、设计目的:1、了解FTP传输原理;2、了解服务器端程序与客户端程序功能的区别,学会编制服务器端和客户端程序以模拟FTP功能。二、设计内容:利用winsock提供的相关函数进行控制台程序的编制,要求分别编制服务器端和客户端程序以模拟FTP功能,并将模拟结果显示在DOS窗口上。三、设计原理、方法和手段使用Winsock进行网络通信程序的设计,要通过本次试验了解如何创建与使用流套接字,并充分了解FTP协议传输数据的原理,为以后自己编制类似的程序打下良好的基础。四、设计组织运行要求注意观察结果,记录并分析编译系统的出错信息提示。五、设计条件Pc机VC++6.0环境六、设计步骤1.启动VisualC++6.0开发环境从“开始”菜单中选择“程序|MicrosoftVisualStudio6.0|MicrosoftVisualC++6.0”,显示VisualC++6.0开发环境窗口。2.创建一个项目(服务器端项目)(1)单击File菜单中的New选项,显示New(新建)对话框。(2)单击Project(项目)标签,在Project选项卡中,选择Win32ConsoleApplication(Win32控制台应用程序向导)。在Location(位置)文本框中指定一个路径,在ProjectName(项目名称)文本框中为项目输入一个名字(例如:lab4.1),单击OK按钮。(3)依据提示单击下一步按钮,直到最后一步点击完成按钮,完成项目的建立。(4)项目建立好后,点击工程菜单,选择设置,在弹出的新窗口中单击连接(Link)选项卡,在对象/库模块文本框中填入wsock32.lib库,点击确定按钮,完成库的添加(或者不做此步,直接到程序里用预编译指令将wsock32.lib库添加进来)。3..编写服务器端源程序文件参考程序见资料p.96(注意理解实现原理)4.建立并运行可执行程序(1)选择菜单命令Build|Buildlab4.1.exe,建立可执行程序。如果你正确输入了源程序,此时便成功地生成了可执行程序(例如:lab4.1.exe)。如果程序有语法错误,则屏幕下方的状态窗口中会显示错误信息,根据这些错误信息对源程序进行修改后,重新选择菜单命令Build|Buildlab4.1.exe,建立可执行程序。(2)选择菜单命令Build|Executelab4.1.exe运行程序,观察屏幕的显示内容。5.建立一个新项目(客户端程序),重复2到4步。6.服务器端和客户端程序编制完毕后,(1)先在编译器内运行服务器端工程文件,注意此时服务器端程序窗口的显示内容,不要关闭该窗口。(2)找到客户端程序所在文件夹下的Debug文件夹,进入该文件夹运行里面的客户端程序可执行文件,可以看到客户端程序窗口,注意此时该窗口的显示内容(此时屏幕上应有两个结果窗口,一个是服务器端的,另一个是客户端的),将两个截图写在报告上并说明原因。(3)在客户端窗口输入一个要打开的文本文件名(绝对路径),回车观察结果窗口的改变,将变化截图写在报告上并说明原因。(4)到任意目录下新建一个文本文档(最好名字为全字母),在文档中输入任意内容并保存。(5)回到客户端程序结果显示窗口,重新输入你刚才建立好的文本文档名(绝对路径),回车,观察程序运行结果,如果程序出错,请修改程序(利用跟踪调试),程序能正确运行后,将两个窗口的截图写在报告上,并说明改变原因。七、思考题在服务器端打开文档并写入后,会覆盖掉客户端传过来文档的内容,想想看能不能将客户端传来的数据保留下来,再在服务器端写入,让客户端和服务器端数据都保存下来。八、设计报告分别记录下以上每个设计内容的结果,并分析结果。在每次设计后,应整理出设计报告,设计报告应包括以下内容:⑴题目;⑵程序清单:每个上机程序的完整源程序代码;⑶运行结果:每个上机程序运行后打印输出的结果;⑷对运行情况所作的分析,以及本次调试程序所取得的经验。如果程序未能通过,则分析其原因。九、其它说明(无)服务端#includewindows.h#includeWinSock.h#includestdio.h#pragmacomment(lib,wsock32.lib)#defineMAX_FILESIZE32*1024#defineRECV_PORT2000#defineSEND_PORT3000SOCKETServerSock,ClientSock;sockaddr_inServerAddr,ClientAddr;//FILEDATADataPacket;structFiledata{charffname[30];charffdata[MAX_FILESIZE];intlen;}DataPacket;intAddrlen;DWORDStartSocket(){WSADATAWSAData;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){printf(Socketinitfail!\n);return(-1);}return(1);}DWORDCreateSocket(){ServerSock=socket(AF_INET,SOCK_STREAM,0);if(ServerSock==SOCKET_ERROR){printf(Socketcreatefail!\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(structsockaddr))==SOCKET_ERROR){printf(Bindisthiserror!\n);//closesocket(ServerSock);//WSACleanup();return(-1);}return(1);}DWORDWriteFile(char*fname,char*fdata,intflen){inti=0;FILE*fp;fp=fopen(fname,w);if(fp==NULL){printf(Cannotopenthefile:%s!\n,fname);//returnFALSE;}for(i=0;iflen;i++){fputc(fdata[i],fp);}fclose(fp);return(1);}DWORDConnectProcess(){Addrlen=sizeof(sockaddr_in);if(listen(ServerSock,5)0){printf(Listenerror!\n);//closesocket(ServerSock);//WSACleanup();return(-1);}printf(Waiting...\n);for(;;){ClientSock=accept(ServerSock,(structsockaddrFAR*)(&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(HasReceivefile:%s,lengthis%d,DataPacket.ffname,DataPacket.len);WriteFile(DataPacket.ffname,DataPacket.ffdata,DataPacket.len);printf(\n);}}//returnTRUE;}intmain(){if(StartSocket()==-1)return(-1);if(CreateSocket()==-1)return(-1);if(ConnectProcess()==-1)return(-1);//closesocket(ServerSock);//closesocket(ClientSock);//WSACleanup();return(1);}客户端#includewindows.h#includeWinSock.h#includestdio.h#includestdlib.h#includestring.h#pragmacomment(lib,wsock32.lib)#defineRECV_PORT2000#defineSEND_PORT3000#defineMAX_FILESIZE32*1024SOCKETServerSock;//FILENAMEDataPacket;sockaddr_inServerAddr;structFiledata{charffname[30];charffdata[MAX_FILESIZE];intlen;}DataPacket;DWORDStartSocket(){WSADATAWSAData;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){printf(Socketinitfail!\n);return(-1);}ServerAddr.sin_family=AF_INET;ServerAddr.sin_addr.s_addr=inet_addr(127.0.0.1);ServerAddr.sin_port=htons(RECV_PORT);return(1);}DWORDCreateSocket(){ServerSock=socket(AF_INET,SOCK_STREAM,0);if(ServerSock==SOCKET_ERROR){printf(SocketCreatefail!\n);WSACleanup();return(-1);}return(1);}voidCallServer(){CreateSocket();while(connect(ServerSock,(structsockaddr*)(&ServerAddr),sizeof(ServerAddr))==SOCKET_ERROR);printf(Linking…\n);}DWORDGetFile(char*fname){FILE*fp;inti=0,Filesize=0,count,total=0;//charc;charbuffer[100];charSenddata[MAX_FILESIZE];if((fp=fopen(fname,r))==NULL){printf(Cannotopenthisfile:%s!\n,fname);return(0);}memset(Senddata,0,MAX_FILESIZE);while(!feof(fp)){count=fread(buffer,sizeof(char),100,fp);if(ferror(fp)){printf(Readerror!\n);break;}Filesize+=count;if(FilesizeMAX_FILESIZE){printf(Youfileistoobig!\n);fclose(fp);return(0);}memcpy(&Senddata[i],buffer,count);i+=count;}fclose(fp);Senddata[i]='\0';strcpy(DataPacket.ffname,fname);memcpy(DataPacket.ffdata,Senddata,Filesize);DataPacket.len=Filesize;pri
本文标题:网络程序综合设计模拟FTP实现
链接地址:https://www.777doc.com/doc-7377869 .html