本文参考 kpler 及引用
里面可能有些错误,欢迎各位指出,本人小白,正学习阶段
server端
功能:实现在局域网里收发文件
ls:查看当前文件
lls:查看服务器文件
cd+空格+文件名(…),服务器进入文件夹或返回上一级
lcd+空格+文件名(…),本地进入文件夹或返回上一级
get+空格+文件名:得到服务器文件
put+空格+文件名: 发送给服务器
存在问题:put指令 没有更详细的判断,如果客户端不存在文件,服务端也创建文件 啊???我就不改了,差不多跟get指令相似的判断
#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 <unistd.h>
#include<string.h>
#include <sys/stat.h>
#include <fcntl.h>
int change(char cmd[128])
{
if(!strcmp("ls",cmd)) { return 1;}
else if(!strcmp("ps",cmd)) { return 2;}
else if(strstr(cmd,"cd")!=NULL) { return 3;}
else if(!strcmp("g",cmd)) { return 4;}
else if(strstr(cmd,"get")!=NULL){ return 5;}
else if(strstr(cmd,"put")!=NULL){ return 6;}
}
char *getbehind(char cmd[128])
{
char *p;
p = (char *)malloc(128);
p = strtok(cmd," ");
p = strtok(NULL," ");
return p;
}
void getmessage(char cmd[128],int cfd)
{
char readbuf[8000];
char *p=getbehind(cmd); //先 精简指令
read(cfd,readbuf,8000); //再将客户端数据 读到buf
int fd = open(p,O_RDWR|O_CREAT,0666); //打开/创建此文件
write(fd,readbuf,strlen(readbuf)); //将客户端数据传给fd文件
printf("receive successfully\n");
close(fd); //put成功
memset(readbuf,0,8000);
}
void choosecmd(char cmd[128],int c_fd)
{
int sfd;
FILE *fdb;
char *readbuf =