当前位置: 技术问答>linux和unix
编写ftp客户端程序遇到的问题
来源: 互联网 发布时间:2016-02-04
本文导语: 最近正在编写一个ftp客户端程序,遇到一些问题: 1:用linux ftp命令可以登录的ftp站点,在我的程序下却不能登录,老是说530 log incorrect;我的程序只能登陆自己在windows下建的一个ftp(我用的是虚拟机下linux),不知是...
最近正在编写一个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 rn",para1);
send(fd,buf,strlen(buf),0); //fd是和ftp服务器相连的socket
nread=recv(fd,buf,LEN,0);
buf[nread]='';
parse(buf); //提取出状态码,如331,230等,存放在buf中
if(strcmp(buf,"331"))
{
printf("Password:");
scanf("%s",para2);
sprintf(buf,"PASS %s rn",para2);
send(fd,buf,strlen(buf),0);
}
nread=recv(fd,buf,LEN,0);
buf[nread]='';
printf("%s",buf);
//若是登录学校的ftp站点,这里输出530 login incorrect,但是直接在shell命令行里用ftp命令可以登录成功; 若是登录自己搭建的ftp,输出230,登陆成功,请问哪里出错了啊?谢谢
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 rn",para1);
send(fd,buf,strlen(buf),0); //fd是和ftp服务器相连的socket
nread=recv(fd,buf,LEN,0);
buf[nread]='';
parse(buf); //提取出状态码,如331,230等,存放在buf中
if(strcmp(buf,"331"))
{
printf("Password:");
scanf("%s",para2);
sprintf(buf,"PASS %s rn",para2);
send(fd,buf,strlen(buf),0);
}
nread=recv(fd,buf,LEN,0);
buf[nread]='';
printf("%s",buf);
//若是登录学校的ftp站点,这里输出530 login incorrect,但是直接在shell命令行里用ftp命令可以登录成功; 若是登录自己搭建的ftp,输出230,登陆成功,请问哪里出错了啊?谢谢
|
USER username rn
PASS password rn
应该是命令格式不正确在linux下换行符是n,没有r,但不知道它是不是兼容windows格式的rn.
去掉试下.
PASS password rn
应该是命令格式不正确在linux下换行符是n,没有r,但不知道它是不是兼容windows格式的rn.
去掉试下.
|
我把username和rn之间的空格去掉后就可以了,但把r去掉后不去空格会出现同样的问题。不过我查了下,linux下回车换行符确实只有一个字节'n'。
====
FTP协议要求rn的,与系统无关。
====
====
为什么只输出buf中的第一行,然后就输出username:_了,当输入用户名后,屏幕上又出现了buf中的剩余字符,即从第二行开始的字符。我不太理解这个啊? 有谁能帮助一下,谢谢。和缓存有关系么?
====
可能有关系,试试fflush
====
FTP协议要求rn的,与系统无关。
====
====
为什么只输出buf中的第一行,然后就输出username:_了,当输入用户名后,屏幕上又出现了buf中的剩余字符,即从第二行开始的字符。我不太理解这个啊? 有谁能帮助一下,谢谢。和缓存有关系么?
====
可能有关系,试试fflush
|
能把源码发个我看看吗,我也正在学习ftp开发,有问题大家可以一起讨论!
chen_weifeng@126.com
chen_weifeng@126.com
|
第一个是PASS %s rn不要有空格,第二个可能是你的缓冲区只定义了1024,而recv中用了4096,定义成一样看看!