实现一个类FTP功能的协议,实现文件的上传和下载和服务器共享目录的查看:
(1)下层使用UDP服务。
(2)支持多用户。
(3)多用户文件的上传和下载可以仅支持当前目录。
(4)给出协议的具体内容。
(5)给出收发双方的交互日志。
(6)使用c系列语言进行实现。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 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.vsFTP_client
目录 0 2018-12-23 20:02 FTP协议FTP项目FTP_client.vsFTP_clientv14
文件 31232 2018-12-23 20:59 FTP协议FTP项目FTP_client.vsFTP_clientv14.suo
目录 0 2018-12-23 20:10 FTP协议FTP项目FTP_clientDebug
文件 56832 2018-12-23 20:10 FTP协议FTP项目FTP_clientDebugFTP_client.exe
文件 403744 2018-12-23 20:10 FTP协议FTP项目FTP_clientDebugFTP_client.ilk
文件 544768 2018-12-23 20:10 FTP协议FTP项目FTP_clientDebugFTP_client.pdb
目录 0 2018-12-23 20:55 FTP协议FTP项目FTP_clientFTP_client
文件 37879808 2018-12-23 20:59 FTP协议FTP项目FTP_clientFTP_client.sdf
文件 1312 2018-12-23 20:02 FTP协议FTP项目FTP_clientFTP_client.sln
目录 0 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebug
文件 301 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.log
文件 92475 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.obj
目录 0 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlog
文件 740 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlogCL.command.1.tlog
文件 31186 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlogCL.read.1.tlog
文件 692 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlogCL.write.1.tlog
文件 253 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlogFTP_client.lastbuildstate
文件 1342 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tloglink.command.1.tlog
文件 3274 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tloglink.read.1.tlog
文件 658 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tloglink.write.1.tlog
文件 814080 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugvc140.idb
文件 438272 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugvc140.pdb
文件 11606 2018-12-23 20:55 FTP协议FTP项目FTP_clientFTP_clientFTP_client.cpp
文件 5807 2018-12-23 20:06 FTP协议FTP项目FTP_clientFTP_clientFTP_client.vcxproj
文件 951 2018-12-23 20:05 FTP协议FTP项目FTP_clientFTP_clientFTP_client.vcxproj.filters
目录 0 2018-12-23 20:55 FTP协议FTP项目FTP_server
............此处省略37个文件信息
#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.
“);
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.vsFTP_client
目录 0 2018-12-23 20:02 FTP协议FTP项目FTP_client.vsFTP_clientv14
文件 31232 2018-12-23 20:59 FTP协议FTP项目FTP_client.vsFTP_clientv14.suo
目录 0 2018-12-23 20:10 FTP协议FTP项目FTP_clientDebug
文件 56832 2018-12-23 20:10 FTP协议FTP项目FTP_clientDebugFTP_client.exe
文件 403744 2018-12-23 20:10 FTP协议FTP项目FTP_clientDebugFTP_client.ilk
文件 544768 2018-12-23 20:10 FTP协议FTP项目FTP_clientDebugFTP_client.pdb
目录 0 2018-12-23 20:55 FTP协议FTP项目FTP_clientFTP_client
文件 37879808 2018-12-23 20:59 FTP协议FTP项目FTP_clientFTP_client.sdf
文件 1312 2018-12-23 20:02 FTP协议FTP项目FTP_clientFTP_client.sln
目录 0 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebug
文件 301 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.log
文件 92475 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.obj
目录 0 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlog
文件 740 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlogCL.command.1.tlog
文件 31186 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlogCL.read.1.tlog
文件 692 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlogCL.write.1.tlog
文件 253 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlogFTP_client.lastbuildstate
文件 1342 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlogli
文件 3274 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlogli
文件 658 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugFTP_client.tlogli
文件 814080 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugvc140.idb
文件 438272 2018-12-23 20:10 FTP协议FTP项目FTP_clientFTP_clientDebugvc140.pdb
文件 11606 2018-12-23 20:55 FTP协议FTP项目FTP_clientFTP_clientFTP_client.cpp
文件 5807 2018-12-23 20:06 FTP协议FTP项目FTP_clientFTP_clientFTP_client.vcxproj
文件 951 2018-12-23 20:05 FTP协议FTP项目FTP_clientFTP_clientFTP_client.vcxproj.filters
目录 0 2018-12-23 20:55 FTP协议FTP项目FTP_server
............此处省略37个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)