C:331/530中的FTP请指定密码

C:331/530中的FTP请指定密码,c,ftp,client,C,Ftp,Client,我在用C语言发送Pass命令时遇到了一个问题,我正在编写一个简单的程序,连接到ftp服务器并将列表打印到标准输出 /* ----------- SET UP CONNECTION ---------*/ //creating socket if((sock=socket(AF_INET,SOCK_STREAM,0))<0) { perror("Main: Creating socket:"); return ERROR; } //Zero out addr memset

我在用C语言发送Pass命令时遇到了一个问题,我正在编写一个简单的程序,连接到ftp服务器并将列表打印到标准输出

/* -----------  SET UP CONNECTION ---------*/
//creating socket
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
    perror("Main: Creating socket:");
    return ERROR;
}

//Zero out addr
memset(&addr, 0, sizeof(addr));

//Getting host name
hPtr=gethostbyname(url.host);
if(hPtr==NULL)
{ 
    perror("Error while getting host name:");
    return ERROR;
}

//Setting up addr for connect
addr.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)hPtr->h_addr_list[0])));

addr.sin_family = AF_INET;
addr.sin_port = htons(url.port);
if((connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr))) < 0)
{
    perror("Error: Connect socket :");
    close(sock);
    return ERROR;
}

//Wait for Service ready
bzero(buffer, MAXBUF);
if(recv(sock, buffer, sizeof(buffer),0)<0)
{
        perror("Error while receiving socket:");
}

printf("%s", buffer);

/* -----     LOGIN USER     -----------*/
bzero(buffer, MAXBUF);
//setup login
strcpy(buffer,"USER ");
strcat(buffer,url.user);
strcat(buffer,"\n");

//Send login
if((send(sock,buffer,MAXBUF,0))<0)
{
    perror("Error while sending socket:");
}
//Receive answer
if((recv(sock, buffer, sizeof(buffer),0))<0)
{
    perror("Error while recieving socket:");
}
printf("%s", buffer);


//Send password
bzero(buffer, MAXBUF);
//setup password
strcpy(buffer,"PASS ");
strcat(buffer,url.pass);
strcat(buffer,"\n");
printf("%s",buffer);
//Send password

if((send(sock,buffer,MAXBUF,0))<0)
{
    perror("Error while sending socket:");
}
//Receive response

if((recv(sock, buffer, sizeof(buffer),0))<0)
{
    perror("Error while recieving socket:");
}
printf("%s", buffer);

close(sock);
return OK;
/*------------设置连接---------*/
//创建套接字
if((sock=socket(AF_INET,sock_STREAM,0))h_addr_list[0]);
addr.sin_family=AF_INET;
addr.sin_port=htons(url.port);
if((connect(sock,(struct sockaddr*)和addr,sizeof(struct sockaddr)))<0)
{
perror(“错误:连接套接字:”);
关闭(袜子);
返回误差;
}
//等待服务就绪
bzero(缓冲区,MAXBUF);

如果(recv(sock,buffer,sizeof(buffer),0)请尝试使用\r\n作为行尾,例如,就像您在解释中所写的那样,但与您在代码中所做的不同。

好的,因此问题在于发送

我需要发送确切的字节数,所以我把 在send()调用中使用strlen(buffer),它开始工作。 项目已成功完成。感谢您的帮助


“尝试发送strlen(缓冲区)而不是MAXBUFF字符。-17小时前的cup”

您确实得到了结果,因此此C代码可能没有问题。没有seg错误或类似情况发生。我怀疑该密码毕竟有问题,因此我们可能无法帮助您。尝试发送strlen(缓冲区)是的,我两个都试过了,在我发布代码的州,情况就是这样。