FTP编程遇到问题

大概思路:利用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]即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值