用UDP实现的FTP


实现一个类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. 
“);
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.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个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)