日期:2014-05-16  浏览次数:20741 次

编写ftp客户端程序遇到的问题
最近正在编写一个ftp客户端程序,遇到一些问题:
1:用linux   ftp命令可以登录的ftp站点,在我的程序下却不能登录,老是说530   log   incorrect;我的程序只能登陆自己在windows下建的一个ftp(我用的是虚拟机下linux),不知是何原因,是发送的命令格式有问题么?   主要代码如下:
        #define   LEN   1024
        char   buf[LEN],buf1[LEN];
        int   para1[50],para2[50];
        int   nread;                      
           ...                //连接等一些工作
  printf( "User   name ");
        scanf( "%s ",para1);       //输入登录名
        sprintf(buf, "USER   %s   \r\n ",para1);
        send(fd,buf,strlen(buf),0);     //fd是和ftp服务器相连的socket
       
        nread=recv(fd,buf,LEN,0);
        buf[nread]= '\0 ';
        parse(buf);                                   //提取出状态码,如331,230等,存放在buf中
  if(strcmp(buf, "331 "))
        {
              printf( "Password: ");
              scanf( "%s ",para2);
              sprintf(buf, "PASS   %s   \r\n ",para2);
              send(fd,buf,strlen(buf),0);  
        }
        nread=recv(fd,buf,LEN,0);
        buf[nread]= '\0 ';
        printf( "%s ",buf);              
  //若是登录学校的ftp站点,这里输出530   login   incorrect,但是直接在shell命令行里用ftp命令可以登录成功;   若是登录自己搭建的ftp,输出230,登陆成功,请问哪里出错了啊?谢谢

------解决方案--------------------
USER username \r\n
PASS password \r\n

应该是命令格式不正确在linux下换行符是\n,没有\r,但不知道它是不是兼容windows格式的\r\n.
去掉试下.


------解决方案--------------------
我把username和\r\n之间的空格去掉后就可以了,但把\r去掉后不去空格会出现同样的问题。不过我查了下,linux下回车换行符确实只有一个字节 '\n '。
====
FTP协议要求\r\n的,与系统无关。
====
====
为什么只输出buf中的第一行,然后就输出username:_了,当输入用户名后,屏幕上又出现了buf中的剩余字符,即从第二行开始的字符。我不太理解这个啊? 有谁能帮助一下,谢谢。和缓存有关系么?
====
可能有关系,试试fflush
------解决方案--------------------
能把源码发个我看看吗,我也正在学习ftp开发,有问题大家可以一起讨论!
chen_weifeng@126.com
------解决方案--------------------
第一个是PASS %s \r\n不要有空格,第二个可能是你的缓冲区只定义了1024,而recv中用了4096,定义成一样看看!