编写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,定义成一样看看!