資源簡介
實現一個類FTP功能的協議,實現文件的上傳和下載和服務器共享目錄的查看:
(1)下層使用UDP服務。
(2)支持多用戶。
(3)多用戶文件的上傳和下載可以僅支持當前目錄。
(4)給出協議的具體內容。
(5)給出收發雙方的交互日志。
(6)使用c系列語言進行實現。
代碼片段和文件信息
#define?_VC
#include?
#include?
#include?
#ifdef?_VC
#pragma?comment(?lib?“Wsock32.lib“?)
#endif
#include
using?namespace?std;
typedef?void(*CMDFUNC)(char[][256]?int?pcount);
#ifndef?MAKEWORD
#define?MAKEWORD(lh)?((WORD)(((BYTE)(l))|(((WORD)(BYTE)(h))<<8)))
#endif
const?int?WSA_MAJOR_VERSION?=?1;
const?int?WSA_MINOR_VERSION?=?1;
#define?WSA_VERSION?MAKEWORD(WSA_MAJOR_VERSION?WSA_MINOR_VERSION)
const?int?FILE_OCTET?=?1;
const?int?MAX_RETRY?=?3;
const?int?FILE_NOTEND_DATALEN?=?512?+?2?+?2;
SOCKET?sock?=?INVALID_SOCKET;
char?desthost[256]?=?“127.0.0.1“;
int??filemode?=?FILE_OCTET;
enum
{
FILE_WSTAT_FIRSTACK?=?0?FILE_WSTAT_NEXTACK?FILE_WSTAT_LASTACK
};
enum
{
FILE_RRQ?=?1?FILE_WRQ?FILE_DATA?FILE_ACK?FILE_CHCK
};
/*?ACK?packet?format
2?bytes?????2?bytes
---------------------
|?Opcode?|???Block?#??|
---------------------
*/
int?makeack(unsigned?short?num?char?*buffer?int?size)
{
int?pos?=?0;
buffer[pos]?=?0;
pos++;
buffer[pos]?=?FILE_ACK;
pos++;
buffer[pos]?=?(char)(num?>>?8);
pos++;
buffer[pos]?=?(char)num;
pos++;
return?pos;
}
/*?read/write?request?packet?format
2?bytes?????string????1?byte?????string???1?byte
------------------------------------------------
|?Opcode?|??Filename??|???0??|????Mode????|???0??|
------------------------------------------------
*/
int?makereq(char?type?int?mode?char?*filename?char?*buffer?int?size)
{
int?pos?=?0;
unsigned?int?i?=?0;
char?*s?=?“octet“;
buffer[pos]?=?0;
pos++;
buffer[pos]?=?type;
pos++;
for?(i?=?0;?i buffer[pos]?=?filename[i];
pos++;
}
buffer[pos]?=?0;???//0
pos++;
for?(i?=?0;?i buffer[pos]?=?s[i];
pos++;
}
buffer[pos]?=?0;
pos++;
return?pos;
}
/*?DATA?packet?format
2?bytes?????2?bytes??????n?bytes
----------------------------------
|?Opcode?|???Block?#??|???Data?????|
----------------------------------
*/
int?makedata(unsigned?short?num?char?*data?int?datasize?char?*buffer?int?bufsize)
{
int?pos?=?0;
buffer[pos]?=?0;
pos++;
buffer[pos]?=?FILE_DATA;
pos++;
buffer[pos]?=?(char)(num?>>?8);
pos++;
buffer[pos]?=?(char)num;
pos++;
memcpy(&buffer[pos]?data?datasize);?//data
pos?=?pos?+?datasize;
return?pos;
}
typedef?struct?_cmdnum?{
char?*cmd;
int?num;
int?paramcount;
CMDFUNC?callback;
}CMDNUM?*PCMDNUM;
extern?char?desthost[256];
extern?SOCKET?sock;
extern?int??filemode;
void?connectto(char?cmd[][256]?int?pcount)
{
strcpy(desthost?cmd[1]);
}
void?quit(char?cmd[][256]?int?pcount)
{
printf(“Exit?now.?\n“);
closesocket(sock);
exit(0);
}
void?downloadfile(char?cmd[][256]?int?pcount)
{
char?send_buffer[1024]?=?{?0?};
char?recv_buffer[1024]?=?{?0?};
sockaddr_in?dest_addr;
sockaddr_in?sour_addr;
struct??timeval?timeout?=?{?50?};
int?sour_len?=?0;
int?ret?=?0;
int?len?=?0;
int?retry?=?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-12-20?18:44??FTP協議\
?????目錄???????????0??2018-12-23?20:57??FTP協議\FTP項目\
?????目錄???????????0??2018-12-23?20:59??FTP協議\FTP項目\FTP_client\
?????目錄???????????0??2018-12-23?20:02??FTP協議\FTP項目\FTP_client\.vs\
?????目錄???????????0??2018-12-23?20:02??FTP協議\FTP項目\FTP_client\.vs\FTP_client\
?????目錄???????????0??2018-12-23?20:02??FTP協議\FTP項目\FTP_client\.vs\FTP_client\v14\
?????文件???????31232??2018-12-23?20:59??FTP協議\FTP項目\FTP_client\.vs\FTP_client\v14\.suo
?????目錄???????????0??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\Debug\
?????文件???????56832??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\Debug\FTP_client.exe
?????文件??????403744??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\Debug\FTP_client.ilk
?????文件??????544768??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\Debug\FTP_client.pdb
?????目錄???????????0??2018-12-23?20:55??FTP協議\FTP項目\FTP_client\FTP_client\
?????文件????37879808??2018-12-23?20:59??FTP協議\FTP項目\FTP_client\FTP_client.sdf
?????文件????????1312??2018-12-23?20:02??FTP協議\FTP項目\FTP_client\FTP_client.sln
?????目錄???????????0??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\
?????文件?????????301??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\FTP_client.log
?????文件???????92475??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\FTP_client.obj
?????目錄???????????0??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\FTP_client.tlog\
?????文件?????????740??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\FTP_client.tlog\CL.command.1.tlog
?????文件???????31186??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\FTP_client.tlog\CL.read.1.tlog
?????文件?????????692??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\FTP_client.tlog\CL.write.1.tlog
?????文件?????????253??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\FTP_client.tlog\FTP_client.lastbuildstate
?????文件????????1342??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\FTP_client.tlog\li
?????文件????????3274??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\FTP_client.tlog\li
?????文件?????????658??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\FTP_client.tlog\li
?????文件??????814080??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\vc140.idb
?????文件??????438272??2018-12-23?20:10??FTP協議\FTP項目\FTP_client\FTP_client\Debug\vc140.pdb
?????文件???????11606??2018-12-23?20:55??FTP協議\FTP項目\FTP_client\FTP_client\FTP_client.cpp
?????文件????????5807??2018-12-23?20:06??FTP協議\FTP項目\FTP_client\FTP_client\FTP_client.vcxproj
?????文件?????????951??2018-12-23?20:05??FTP協議\FTP項目\FTP_client\FTP_client\FTP_client.vcxproj.filters
?????目錄???????????0??2018-12-23?20:55??FTP協議\FTP項目\FTP_server\
............此處省略37個文件信息
評論
共有 條評論