深 圳 大 学 实 验 报 告
实验课程名称: 计算机网络
实验项目名称: Socket 编程
学院: 计算机与软件学院 专业: 计算机科学与技术
报告人: 学号: 班级:
同组人:
指导教师:
实验时间: 2015-05-10 提交时间: 2015年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 @ 在整个交互的过程中,控制连接始终处于连接的状态。
数据连接在每传输一个文件时先打开,传输后关闭
3、实验分析设计
(1)服务端启动,等待用户连接
(2)客户端启动,请求与服务端连接
(3)服务端应答,与用户建立连接
(4)用户输入目录操作、文件上传下载等指令,服务端接收到指令后进行解析,作出
相应的响应
(5)重复(4)的过程,直至用户输入quit指令要求离开,服务结束
4、核心代码说明
#pragma comment(lib,"ws2_32")
#include<>
#include<fstream>
#include<iostream>
#include<>
#include<>
#include<string>
#include""
using namespace std;
#define MENU "Welcome To The FTP Server,Please Input The Command And Enter!Such as: LIST,CWD,RETR,STOR,DELE,RMD,MKD"
;
cout<<Dir<<endl;
client->sendCommand();
client->receiveCommand();
client->receiveList();
socket编程实验的心得体会 client->receiveCommand();
}
else if(strcmp(Command,"CWD")==0||strcmp(Command,"cwd")==0)
{
memset(Dir,NULL,512);
cout<<"Plase input the dir of your will(compelete dir)::"<<endl;
cin>>Dir;
client->setCommand("CWD ",Dir);
client->sendCommand();
client->receiveCommand();
}
else if(strcmp(Command,"retr")==0||strcmp(Command,"RETR")==0)
{
char* filename = new char[512];
memset(filename,NULL,512);
/************************************
下载模块
************************************/
client->setCommand("PASV");
client->sendCommand();
client->receiveCommand();
client->getPort();
client->setCommand("TYPE","I");
client->sendCommand();
client->receiveCommand();
client->interlizeDataSocket();
cout<<"Please input the name you want to download:";
cin>>filename;
client->setCommand("RETR ",filename);
client->sendCommand();
client->receiveCommand();
client->receiveData(filename);
client->receiveCommand();
delete filename;
}
else if(strcmp(Command,"stor")==0||strcmp(Command,"STOR")==0)
{
char* filename = new char[512];
memset(filename,NULL,512);
/************************************
上传模块
************************************/
client->setCommand("PASV");
client->sendCommand();
client->receiveCommand();
client->getPort();
client->setCommand("TYPE","I");
client->sendCommand();
client->receiveCommand();
client->interlizeDataSocket();
cout<<"Please input the name you want to UPload:";
cin>>filename;
client->setCommand("STOR ",filename);
client->sendCommand();
client->receiveCommand();
client->sendData(filename);
client->receiveCommand();
delete filename;
}
else if(strcmp(Command,"dele")==0||strcmp(Command,"DELE")==0)
<<endl;
cout<<"Cleaning system resource"<<endl;
//delete [] userName;
//delete [] Direct;
//delete client;
cout<<"Exiting Goodbye"<<endl;
system("pause");
}
5、测试与结果
6、总结与分析
本次实验达到了本项实验的初始目的和要求。通过这次实验,我对socket的网络编程有了更清楚的认识,懂得了它怎么联网并对ftp上的文件的上传,下载等操作,知道了怎么把书上的知识在实际中的运用。不过由于对界面的设计还不是很了解,还不能很好地把界面设计出来。希望下次能做得更好!
七、参考资料
①《现代网络技术教程——自顶向下分析与设计》
②百度百科
③百度知道
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论