• 大小: 25.13MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-23
  • 语言: 其他
  • 标签: TFTP  socket  C++  

资源简介

实现一个类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\link.command.1.tlog
     文件        3274  2018-12-23 20:10  FTP协议\FTP项目\FTP_client\FTP_client\Debug\FTP_client.tlog\link.read.1.tlog
     文件         658  2018-12-23 20:10  FTP协议\FTP项目\FTP_client\FTP_client\Debug\FTP_client.tlog\link.write.1.tlog
     文件      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个文件信息

评论

共有 条评论