实现:基于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

#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
//
默认应答大小

#define
DEFAULT_PORT 1912
//
默认端口


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;

/**/
/************************************************************************/

/**/
/* 消息头 */

/**/
/************************************************************************/
struct
MSG_HEARDER

...
{
unsigned int msg_id;//消息ID
unsigned long msg_length;//消息长度

MSG_HEARDER():msg_id(0),msg_length(0)...{ }
}
;


/**/
/************************************************************************/

/**/
/* 命令包 msg_id=1 */

/**/
/* 所有命令:hello,root,dir,quit,get,put,exec,del,shutdown */

/**/
/************************************************************************/
struct
ORDER_PACKET

...
{
struct MSG_HEARDER Msg_Header;//头
ORDER_TYPE order_id;
char order_buffer[DEFAULT_ORDER_BUFFER_SIZE];

ORDER_PACKET():Msg_Header(),order_id(ORDER_ERROR)...{}
}
;


/**/
/************************************************************************/

/**/
/* 文件块 msg_id=2 */

/**/
/************************************************************************/
struct
FILE_PACKET

...
{
char file_packet[DEFAULT_FILE_BLOCK_SIZE+1];
int file_block_len;
}
;


/**/
/************************************************************************/

/**/
/* 文件长度包 msg_id=3 */

/**/
/************************************************************************/
struct
FILE_LEN_PACKET

...
{ unsigned long file_length;//文件总大小
}
;


/**/
/************************************************************************/

/**/
/* 命令应答包 msg_id=5 */

/**/
/************************************************************************/
struct
ORDER_ANSWER

...
{
struct MSG_HEARDER Msg_Header;//头
union

...{
char answer_buffer[DEFAULT_ACK_PACKET_SIZE];
struct FILE_PACKET fp;
struct FILE_LEN_PACKET flp;
}Answer;

ORDER_ANSWER():Msg_Header()...{}
}
;


/**/
/************************************************************************/

/**/
/* 常用信息包 msg_id=4 */