计网socket编程实验报告
- 格式:doc
- 大小:20.00 KB
- 文档页数:7
计网socket编程实验报告
大学实验报告实验课程名称:
计算机网络实验项目名称:
Socket 编程学院:
计算机与软件学院专业:
计算机科学与技术报告人:
学号:
班级:
同组人:
指导教师:
实验时间:
全文结束》》-05-10 提交时间:
全文结束》》年5月29日声明:本次实验内容由报告人和同组人独立完成,所有涉及到他人的工作均已说明。
报告人和同组人均同意教师及学校为教学活动而引用本实验的内容,且无需事先征得同意和特别说明。
教务处制
1、实验目的了解FTP协议的工作原理,掌握基于socket的网络编程的基本原理。
2、实验要求用 Socket (WinSock)编程,实现简单的 FTP 客户端:客户端和 FTP 服务器建立 Socket 连接。
向服务器发送 USER、PASS 命令登录 FTP 服务器。
使用 PORT(或PASV)建立数据连接。
使用 NLST 进行文件列表。
使用 RETR / STOR 命令下载/上传文件。
在下载完毕后断开数据连接并发送 QUIT 命令退出。
服务器:Apache Friends 中的 FileZillaFTP,或是lab:lab @ ftp、case、szu、edu、cn在整个交互的过程中,控制连接始终处于连接的状态。
数据连接在每传输一个文件时先打开,传输后关闭
3、实验分析设计(1)服务端启动,等待用户连接(2)客户端启动,请求与服务端连接(3)服务端应答,与用户建立连接(4)用户输入目录操作、文件上传下载等指令,服务端接收到指令后进行解析,作出相应的响应(5)重复(4)的过程,直至用户输入quit指令要求离开,服务结束
4、核心代码说明#pragma
ment(lib,"ws2_32")#include<WinSock、
h>#include<fstream>#include<iostream>#include<errno、
h>#include<time、h>#include<string>#include"ftpClient、h"using namespace std;#define MENU "Wele To The FTP Server,Please Input The mand And Enter!Such as:
LIST,CWD,RETR,STOR,DELE,RMD,MKD"//定义了在ftp服务器上能进行的操作int main(){char
Dir[256];memset(Dir,NULL,256);int returnNum;char
ip[16];int port;char test;char
userName[50];memset(userName,NULL,50);strncpy(userName,"a nonymous",strlen("anonymous"));char PWD[50];char
temp[512];char mand[4];//char
Parameter[256];cout<<"Please input the ip of the FTP server::";cin>>ip;cout<<"Do you want to change the
port,Now the port is21 :[Y/N]"; //使用命令端口21来连接到ftp服务器,在ftp协议下不用更改
cin>>test;if(test=='Y'||test=='y')//连接到ftp服务器{cout<<"Please input the num of the
port::";cin>>temp;port =(temp[0]
'0')*10+(temp[2]>setmand("USER",userName);//验证登录名cout<<userName<<endl;client->sendmand(); //向ftp服务器发送用户名returnNum = client->receivemand(); //从ftp服务器接收到的响应码,正确时应为331if(returnNum
==331){cout<<"PassWord::";cin>>PWD;//输入密码client-
>setmand("PASS",PWD);client->sendmand();returnNum =
client->receivemand(); //从ftp服务器接收响应码,正确时应返回230if(returnNum ==230)
//用户已经正确登录到了ftp服务器
{while(1){cout<<MENU<<endl;cout<<"FTP::>";cin>>mand;if(st rcmp(mand,"list")==0||strcmp(mand,"LIST")==0){/********** **************************连接控制,传输控制,命令传输(需
使用socketData连接的命令,如:LIST)
************************************/client-
>setmand("PASV");client->sendmand();client-
>receivemand();client->getPort();client-
>setmand("TYPE","I");client->sendmand();client-
>receivemand();client->interlizeDataSocket();client-
>setmand("LIST", "、");cout<<Dir<<endl;client-
>sendmand();client->receivemand();client-
>receiveList();client->receivemand();}else
if(strcmp(mand,"CWD")==0||strcmp(mand,"cwd")==0){memset(D ir,NULL,512);cout<<"Plase input the dir of your
will(pelete dir)::"<<endl;cin>>Dir;client->setmand("CWD ",Dir);client->sendmand();client->receivemand();}else
if(strcmp(mand,"retr")==0||strcmp(mand,"RETR")==0){char* filename = new
char[512];memset(filename,NULL,512);/******************** ****************下载模块
************************************/client-
>setmand("PASV");client->sendmand();client-
>receivemand();client->getPort();client-
>setmand("TYPE","I");client->sendmand();client-
>receivemand();client-
>interlizeDataSocket();cout<<"Please input the name you want to download:";cin>>filename;client->setmand("RETR ",filename);client->sendmand();client-
>receivemand();client->receiveData(filename);client-
>receivemand();delete filename;}else
if(strcmp(mand,"stor")==0||strcmp(mand,"STOR")==0){char* filename = new
char[512];memset(filename,NULL,512);/******************** ****************上传模块
************************************/client-
>setmand("PASV");client->sendmand();client-
>receivemand();client->getPort();client-
>setmand("TYPE","I");client->sendmand();client-
>receivemand();client-
>interlizeDataSocket();cout<<"Please input the name you want to UPload:";cin>>filename;client->setmand("STOR ",filename);client->sendmand();client-
>receivemand();client->sendData(filename);client-
>receivemand();delete filename;}else
if(strcmp(mand,"dele")==0||strcmp(mand,"DELE")==0)//进入删除文件的程序代码段{char* filename = new
char[512];memset(filename,NULL,strlen(filename));cout<<"P
lease input the filename you want to
Delete:";cin>>filename;client->setmand("DELE
",filename);client->sendmand();client-
>receivemand();delete filename;}else
if(strcmp(mand,"rmd")==0||strcmp(mand,"RMD")==0)//进入删除目录的程序代码段
{memset(Dir,NULL,strlen(Dir));cout<<"Please input the Direct you want to Delete:";cin>>Dir;client->setmand("RMD ",Dir);client->sendmand();client->receivemand();}else
if(strcmp(mand,"mkd")==0||strcmp(mand,"MKD")==0)//进入修改文件的程序代码段
{memset(Dir,NULL,strlen(Dir));cout<<"Please input the Direct you want to Make:";cin>>Dir;client->setmand("MKD ",Dir);client->sendmand();client->receivemand();}else
if(strcmp(mand,"QUIT")==0||strcmp(mand,"quit")==0)//进入退出文件的程序代码段{break;}else{cout<<"No such
MAND!!";}}}}elsecout<<"Error You can not login in、
"<<endl;cout<<"Cleaning system resource"<<endl;//delete [] userName;//delete
[] Direct;//delete client;cout<<"Exiting Goodbye"<<endl;system("pause");}
5、测试与结果
6、总结与分析本次实验达到了本项实验的初始目的和要求。
通过这次实验,我对socket的网络编程有了更清楚的认识,懂得了它怎么联网并对ftp上的文件的上传,下载等操作,知道了怎么把书上的知识在实际中的运用。
不过由于对界面的设计还不是很了解,还不能很好地把界面设计出来。
希望下次能做得更好!七、参考资料①《现代网络技术教程自顶向下分析与设计》②百度百科③百度知道。