实现:基于winsock TCP,文件传输协议是自定义的
功能:
客户端命令:hello,root,dir,get,put,exec,del,shutdown
服务器返回:HELLO 返回主机名OK;
root 返回主机所有分区
dir [path]返回主机[path]所有文件名
get [path] 下载主机[path]文件
put [path] 将客户端[path]文件上传到Server
del [path] 删除Server文件
exec [path] 运行Server文件
quit 客户端退出
shutdown 客户端退出,Server服务关闭
测试:局域网内测试成功,文件类型、大小不受限制
本代码只用来仅供你我探讨学习之用
包结构定义:
#ifndef __DEFINE__H
#define
__DEFINE__H
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
#define
DEFAULT_MAX_SIZE 2048
//
最大
#define
DEFAULT_ORDER_BUFFER_SIZE 256
//
默认命令缓冲大小
#define
DEFAULT_FILE_BLOCK_SIZE 1024
//
默认文件块大小
#define
DEFAULT_MSG_PACKET_SIZE 128
//
默认消息大小
#define
DEFAULT_ACK_PACKET_SIZE 1024
//
默认应答大小
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
#define
DEFAULT_PORT 1912
//
默认端口
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
typedef
enum
...
{
ORDER_HELLO=1,ORDER_ROOT,ORDER_DIR,
ORDER_GET,ORDER_PUT,ORDER_QUIT,
ORDER_EXEC,ORDER_DEL,ORDER_SHUTDOWN,ORDER_ERROR
}
ORDER_TYPE;
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/************************************************************************/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/* 消息头 */
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/************************************************************************/
struct
MSG_HEARDER
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
unsigned int msg_id;//消息ID
unsigned long msg_length;//消息长度
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
MSG_HEARDER():msg_id(0),msg_length(0)...{ }
}
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/************************************************************************/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/* 命令包 msg_id=1 */
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/* 所有命令:hello,root,dir,quit,get,put,exec,del,shutdown */
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/************************************************************************/
struct
ORDER_PACKET
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
struct MSG_HEARDER Msg_Header;//头
ORDER_TYPE order_id;
char order_buffer[DEFAULT_ORDER_BUFFER_SIZE];
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
ORDER_PACKET():Msg_Header(),order_id(ORDER_ERROR)...{}
}
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/************************************************************************/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/* 文件块 msg_id=2 */
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/************************************************************************/
struct
FILE_PACKET
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
char file_packet[DEFAULT_FILE_BLOCK_SIZE+1];
int file_block_len;
}
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/************************************************************************/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/* 文件长度包 msg_id=3 */
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/************************************************************************/
struct
FILE_LEN_PACKET
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{ unsigned long file_length;//文件总大小
}
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/************************************************************************/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/* 命令应答包 msg_id=5 */
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/************************************************************************/
struct
ORDER_ANSWER
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
struct MSG_HEARDER Msg_Header;//头
union
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
char answer_buffer[DEFAULT_ACK_PACKET_SIZE];
struct FILE_PACKET fp;
struct FILE_LEN_PACKET flp;
}Answer;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
ORDER_ANSWER():Msg_Header()...{}
}
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/************************************************************************/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/* 常用信息包 msg_id=4 */