深 圳 大 学 实 验 报 告
实验课程名称:            计算机网络               
      实验项目名称:          Socket 编程               
             
学院:  计算机与软件学院 专业:  计算机科学与技术 
       
      报告人:        学号:              班级:        
     
      同组人:                                           
 
指导教师:                                       
      实验时间:  2015-05-10  提交时间:  2015年529日 
声明:
    本次实验内容由报告人和同组人独立完成,所有涉及到他人的工作均已说明。报告人和同组人均同意教师及学校为教学活动而引用本实验的内容,且无需事先征得同意和特别说明。
教务处制
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小时内删除。