计算机网络课程设计实验报告(北京科技大学--arp、ftp、ip包)(6)

2019-08-30 17:51

else closesocket(socketControl); memset (cmdBuffer,NULL,512); return 0; } memset (cmdBuffer,NULL,512); return 0; }

/**************************************** buffer:文件缓冲区

cmdBuffer:接收命令缓冲区 listBuffer:文件列表缓冲区

command:命令格式构造使用缓冲区 ip:ip地址,p:端口号

****************************************/ public: ftpClient(string ip,int p) { this->buffer = new char[4096]; memset (buffer,NULL,4096); this->cmdBuffer = new char[512]; memset (cmdBuffer,NULL,512); this->listBuffer = new char[4096]; memset (listBuffer,NULL,4096); this->command = new char[512]; memset (command,NULL,512); ipAddress = ip; port = p; cout<<\ if(interlizeSocket()==1) cout<<\ } ~ftpClient() { delete buffer; delete cmdBuffer; delete listBuffer; delete command; closesocket(socketControl); }

/**************************************** privatePart:固定部分如USER PASS 等 userPart:用户输入部分如Anonymous Direct等 标准格式

26 / 37

一般为<\\r\\n> 如:USER Anonymous\\r\\n

<\\r\\n>如PASV\\r\\n

****************************************/ int setCommand(char* privatePart,char* userPart) { memset (command,NULL,strlen(command)); memcpy (command,privatePart,strlen(privatePart)); memcpy (command+strlen(privatePart),userPart,strlen(userPart)); memcpy (command+strlen(privatePart)+strlen(userPart),\ return 1; } int setCommand(char* privatePart) { memset(command,NULL,strlen(command)); memcpy(command,privatePart,strlen(privatePart)); memcpy (command+strlen(privatePart),\ return 1; }

/******************************************* 发送command中的命令

command中必须有格式化好的命令

*******************************************/ int sendCommand() { cout<<\ send(socketControl,command,strlen(command),0); memset(command,NULL,strlen(command)); return 1; }

/******************************************** 接收控制信息应答码

从socketControl接收信息读入cmdBuffer 成功返回代码,失败返回600.

********************************************/ int receiveCommand() { memset(cmdBuffer,NULL,strlen(cmdBuffer)); if(recv(socketControl,cmdBuffer,512,0)) { cout<<\ int temp = getCode(); return temp; }

27 / 37

return 600; }

/******************************************** socketData初始化,取PASV的返回信息,转化为int 建立socket,socketData信息储存在buffer 或listBuffer中,用于数据的传输。

条件:cmdBuffer中必须储存有PASV返回信息 ********************************************/ int getPort() { /************************************ 端口号分析相关,通过num数组读取3位 端口号,通过定位,转换2部分转换为int 型端口号。公式x.x.x.x.aaa.bbb::端口号 ::aaa*512+bbb(网上查得) 或将aaabbb转换为十进制相加(原为 十六进制) ************************************/ char* num = new char[3]; int flagA = 2; int flagB = 0; int temp; int j = 0; int i; int test; for(int i = 0;i<=511;i++) { if (cmdBuffer[i]==',') { flagB++; if(flagB==4) { temp = i; temp++; break; } } } i = temp; while (flagA>0) { if (cmdBuffer[i]>='0'&&cmdBuffer[i]<='9')

28 / 37

{ num[j]=cmdBuffer[i]; i++; j++; } else { flagA--; if (j==3) { test = (num[0]-'0')*100+(num[1]-'0')*10+(num[2]-'0'); } else if (j==2) { test = (num[0]-'0')*10+(num[1]-'0'); } else if (j==1) { test = num[0]-'0'; } for(j=3;j>=0;j--) { num[j]=NULL; } if (flagA == 1) { temp = test *256; i++; j++; } else if(flagA == 0) { temp += test; } } } portForData = temp; cout<<\ return 1; }

/********************************** socket创建相关

**********************************/ int interlizeDataSocket()

29 / 37

{ //创建流式Socket socketData = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //填充本地Socket地址 serveraddrData.sin_family=AF_INET; serveraddrData.sin_port=htons(portForData); serveraddrData.sin_addr.s_addr=inet_addr(ipAddress.c_str()); //向FTP服务器发送Connect请求 connect (socketData, (sockaddr*)&serveraddrData, sizeof(serveraddrData)); return 1; }

/***************************************** 接收LIST列表,返回应答码

*****************************************/ int receiveList() { memset(listBuffer,NULL,4096); int r = recv(socketData,listBuffer,4096,0); cout<

/***************************************** 接收数据链路信息

接收数据储存在filename中

*****************************************/ int receiveData(char* fileName) { int cmdLenght = strlen(cmdBuffer); int temp = cmdLenght; long fileLenght = 0; for (temp;temp>=0;temp--) { if (cmdBuffer[temp] == '(') break; } for(temp;temp<=cmdLenght;temp++) { if (cmdBuffer[temp]<='9'&&cmdBuffer[temp]>='0') fileLenght = fileLenght * 10 + (cmdBuffer[temp]-'0'); } while(1) {

30 / 37


计算机网络课程设计实验报告(北京科技大学--arp、ftp、ip包)(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:怎样成为一名合格的咨询顾问 - 咨询顾问成功宝典 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: