大概思路:利用socket编程服务器和客户端流程编写通信方面的代码;读取命令的本质就是从本地键盘获取命令gets()(读取字符串);通过对字符串的处理通过(strstr,strtok,strcmp,strcpy,memset)对命令(字符串)进行识别然后根据识别操作进行一些了后续操作。
问题1:后面输出多余的内容
原因:图下write的第三个参数要写strlen();因为若写 sizeof()则写1024byte,而 readbuf中的字符串没有将1024写满所以后面有很多“空”的内容。并且由于客户端一次只能读128个字符所以会有多排“read content:”(就是发过来的数据的大小与读取的大小不匹配)
char readbuf[1024];
memset(readbuf,0,1024);
switch(ret){
case LS:
fd=popen("ls","r");
fread(readbuf,1,1024,fd);
write(cli_fd,readbuf,sizeof(readbuf));
case -1:printf("no such command\n");
defalut:break;
问题2:无论输入什么都会显示输入"LS"时的命令情况。
int get_cmd_type(char*cmd){
if(strcmp(cmd,"ls")==0) return LS;
if(strcmp(cmd,"pwd")==0) return PWD;
if(strcmp(cmd,"quit")==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;
}
原因:在get_cmd_type()的函数中最底下没有写return ,导致无论输入什么,都默认return0(我测试过int型的子函数不写return,默认return 0);
问题3:read对方发过来的数据时阻塞
原因:读写类型不匹配,read的是字符串型的,发过来的是个结构体类型的。
问题4:put文件时创建失败,
fd1=open(file,O_RDWR|O_CREAT,0777);
原因:可能有下面这么几种
①file为空:数据赋值传输的过程出错了
②权限不够:7777,第一个数字需要root权限要改成0777。
③7777创建的文件没删除,open的时候权限不够。
问题5:数据接收发送混乱
原因:一次命令的结构体的数据没有统一发送。
结构体里的数据应该统一赋值,统一发送,一个命令发送一次数据即可。读取端一次读取结构体的所有内容。
问题6:get到的文件缺少
原因:传输文件数据额的字符数组太小了,char second[1024] 1kb 根本不够用,将其改为char second[10240]即可。