一、config.h
#define LLS 1
#define LS 2
#define LCD 3
#define CD 4
#define PUT 5
#define GET 6
#define QUIT 7
#define PWD 8
struct Msg
{
char data[128];
char Buf[1024];
};
二、服务器端demo:
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "config.h" /* 存放define宏定义和结构体 */
int cmd_Get(char *cmd) /* 用于判断收到指令的类型 */
{
if(strcmp("ls",cmd) == 0) return LS;
if(strcmp("pwd",cmd) == 0) return PWD;
if(strcmp("quit",cmd) == 0) return QUIT;
if(strstr(cmd,"cd") != NULL) return CD;
if(strstr(cmd,"get") != NULL) return GET;
if(strstr(cmd,"put") != NULL) return PUT;
return -1;
}
char *file_Get(char *msg) /* 用与将指令后的文件名提取出来,并返回 */
{
char *p;
p = strtok(msg," ");
p = strtok(NULL," ");
return p;
}
void cmd_handler(struct Msg msg,int fd) /* 用于处理接收到的指令 */
{
int ret = cmd_Get(msg.data);
int filefd;
FILE *fp;
char *dir = NULL;
struct Msg readBuf;
switch(ret){
case LS:
case PWD:
fp = popen(msg.data,"r");
fread(msg.Buf,sizeof(msg.Buf),1,fp);
write(fd,&msg,sizeof(struct Msg));
break;
case CD:
dir = file_Get(ms