计网socket编程实验报告材料.docx
《计网socket编程实验报告材料.docx》由会员分享,可在线阅读,更多相关《计网socket编程实验报告材料.docx(13页珍藏版)》请在冰豆网上搜索。
计网socket编程实验报告材料
深圳大学实验报告
实验课程名称:
计算机网络
实验项目名称:
Socket编程
学院:
计算机与软件学院专业:
计算机科学与技术
报告人:
学号:
班级:
同组人:
指导教师:
实验时间:
2015-05-10提交时间:
2015年5月29日
声明:
本次实验内容由报告人和同组人独立完成,所有涉与到他人的工作均已说明。
报告人和同组人均同意教师与学校为教学活动而引用本实验的内容,且无需事先征得同意和特别说明。
教务处制
一、实验目的
了解FTP协议的工作原理,掌握基于socket的网络编程的根本原理。
二、实验要求
用Socket〔WinSock〕编程,实现简单的FTP客户端:
客户端和FTP服务器建立Socket连接。
向服务器发送USER、PASS命令登录FTP服务器。
使用PORT〔或PASV〕建立数据连接。
使用NLST进展文件列表。
使用RETR/STOR命令下载/上传文件。
在下载完毕后断开数据连接并发送QUIT命令退出。
服务器:
ApacheFriends中的FileZillaFTP,或是
lab:
labftp.case.szu.edu.
在整个交互的过程中,控制连接始终处于连接的状态。
数据连接在每传输一个文件时先打开,传输后关闭
三、实验分析设计
〔1〕服务端启动,等待用户连接
〔2〕客户端启动,请求与服务端连接
〔3〕服务端应答,与用户建立连接
〔4〕用户输入目录操作、文件上传下载等指令,服务端接收到指令后进展解析,作出
相应的响应
〔5〕重复〔4〕的过程,直至用户输入quit指令要求离开,服务完毕
四、核心代码说明
#pragmament(lib,"ws2_32")
#include
#include
#include
#include
#include
#include
#include"ftpClient.h"
usingnamespacestd;
#defineMENU"WeleToTheFTPServer,PleaseInputThemandAndEnter!
Suchas:
LIST,CWD,RETR,STOR,DELE,RMD,MKD"
//定义了在ftp服务器上能进展的操作
intmain()
{
charDir[256];
memset(Dir,NULL,256);
intreturnNum;
charip[16];
intport;
chartest;
charuserName[50];
memset(userName,NULL,50);
strncpy(userName,"anonymous",strlen("anonymous"));
charPWD[50];
chartemp[512];
charmand[4];
//charParameter[256];
cout<<"PleaseinputtheipoftheFTPserver:
:
";
cin>>ip;
cout<<"Doyouwanttochangetheport,Nowtheportis21:
[Y/N]";
//使用命令端口21来连接到ftp服务器,在ftp协议下不用更改
cin>>test;
if(test=='Y'||test=='y')//连接到ftp服务器
{
cout<<"Pleaseinputthenumoftheport:
:
";
cin>>temp;
port=(temp[0]-'0')*100+(temp[1]-'0')*10+(temp[2]-'0');//将字符型转化为数值型
memset(temp,NULL,2);
}
elseif(test=='N'||test=='n')
port=21;
else
cout<<"Error"</************************************
用户登录模块
************************************/
ftpClient*client=newftpClient(ip,port);
cout<<"DoyouwanttochangeUSERNAME,Nowisanonymous:
[Y/N]";//不更改时默认的是匿名登录
cin>>test;
if(test=='Y'||test=='y')
{
cout<<"UserName:
:
";
cin>>userName;//输入登录名
}
elseif(test=='N'||test=='n')
cout<<"UserName:
:
anonymous"<else
cout<<"ErrorCheckinput!
"<client->setmand("USER",userName);//验证登录名
cout<client->sendmand();//向ftp服务器发送用户名
returnNum=client->receivemand();//从ftp服务器接收到的响应码,正确时应为331
if(returnNum==331)
{
cout<<"PassWord:
:
";
cin>>PWD;//输入密码
client->setmand("PASS",PWD);
client->sendmand();
returnNum=client->receivemand();//从ftp服务器接收响应码,正确时应返回230
if(returnNum==230)//用户已经正确登录到了ftp服务器
{
while
(1)
{
cout<