资源简介
实现一个类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个文件信息
相关资源
- 王小凤主讲 严蔚敏《数据结构》考研
- Algorithms Fourth Edition [pdf]
- skillcore实现的UI动画Demo
- HP-Socket开发TCP Server
- HP-Socket开发TCP Client
- USB HID开发相关的库和头文件32位和6
- opencv车牌识别
- FFmpeg+qt实现的播放器工程
- Unity+VS+Socket实现聊天室
- 颜色识别中各颜色阈值快速查找小程
- 直线的四种裁剪算法
- Socket For Unity3d
- 程序员的自我修养 装载,链接,库
- Web网盘,WebSocket通讯
- SocketChatRoom-master.rar
- 一个基于easypr的车牌识别demo
- QT Creator快速入门(第3版 高清PDF)
- VS2015编译的OpenCV4.1.2
- 基于余数系统的sm2白盒数字签名
- Qt Creator快速入门(第三版)
- 海康CH-HCNetSDKV5.3.6.30sdk_Win32_Win64.zip
- 功能强大的IOCP Socket Servre模块例程源
- 《QT5开发及》教程配套
- 西电-面向对象课件褚华老师所著
- 基于DirectX的简单GUI界面制作
- Game development and simulation with Unreal te
- Visual Studio 2017 符号文件
- bmp格式图片缩小
- 猫版马里奥VC工程源代码Visual Studio
- 安卓socket控制树莓派GPIO(含server及
评论
共有 条评论