linux上的ftp客户端';500'';:命令不明白';

linux上的ftp客户端';500'';:命令不明白';,linux,ftp,berkeley-sockets,Linux,Ftp,Berkeley Sockets,我尝试使用简单的ftp客户端来获取bsd套接字上的文件列表。这是: connectTo(int client_socket, struct sockaddr_in* addr, char* ipv4Address, char* user, char* password, char* response) // buffer wchich store resp

我尝试使用简单的ftp客户端来获取bsd套接字上的文件列表。这是:

connectTo(int client_socket, 
              struct sockaddr_in* addr,
              char* ipv4Address,
              char* user,
              char* password,
              char* response) // buffer wchich store responses
{
    client_socket = socket(AF_INET, SOCK_STREAM, 0);
    if(socket < 0)
    {
        printf("Can not create socket");
        return 2;
    }

    addr->sin_family = AF_INET; // address family - internet socket
    addr->sin_port = htons(PORT_NUMBER);
    addr->sin_addr.s_addr = inet_addr(ipv4Address);
    if(connect(client_socket,(struct sockaddr*)addr,sizeof(*addr)) < 0)
    {
        printf("Can not connect!\n");
        return 3;
    }

    int size_read = recv(client_socket, response, BUF_SIZE, 0);

        printf("size_read = %d\n",size_read);
        response[size_read] = '\0'; // for not printing rubbish
        printf("%s\n",response);

    printf("sending username\n");
    char *username = strdup("USER trenkinan\r\n");
    send(client_socket,username,strlen(username)+1,0);


    size_read = recv(client_socket, response, BUF_SIZE, 0);

   //     printf("size_read = %d\n",size_read);
        response[size_read] = '\0'; // for not printing rubbish
        printf("%s",response);
    if(strstr(response,"331"))
    {
        //printf("sending password\n");
        char *passwd = strdup("PASS test\r\n");

       // printf("passwd string: %s",passwd);
        int sent = send(client_socket,passwd,strlen(passwd)+1,0);
        size_read = recv(client_socket, response, BUF_SIZE, 0);
        response[size_read] = '\0'; // for not printing rubbish
        printf("%s",response);

        //printf("sent bytes: %d\n", sent); 
    }

    return 0;
}
connectTo(int客户端\u套接字,
*地址中的结构sockaddr_,
char*ipv4地址,
字符*用户,
字符*密码,
char*response)//缓冲区存储响应
{
client\u socket=socket(AF\u INET,SOCK\u STREAM,0);
如果(插座<0)
{
printf(“无法创建套接字”);
返回2;
}
addr->sin\u family=AF\u INET;//地址族-internet套接字
地址->单端口=htons(端口号);
addr->sin\u addr.s\u addr=inet\u addr(ipv4Address);
if(connect(client_socket,(struct sockaddr*)addr,sizeof(*addr))<0)
{
printf(“无法连接!\n”);
返回3;
}
int size_read=recv(客户端套接字,响应,BUF_大小,0);
printf(“大小读取=%d\n”,大小读取);
响应[size_read]='\0';//不打印垃圾
printf(“%s\n”,响应);
printf(“发送用户名\n”);
char*username=strdup(“用户trenkinan\r\n”);
发送(客户端_套接字,用户名,strlen(用户名)+1,0);
size_read=recv(客户端套接字,响应,BUF_大小,0);
//printf(“大小读取=%d\n”,大小读取);
响应[size_read]='\0';//不打印垃圾
printf(“%s”,响应);
if(strstr(响应,“331”))
{
//printf(“发送密码”);
char*passwd=strdup(“通过测试\r\n”);
//printf(“passwd字符串:%s”,passwd);
int sent=send(客户端_套接字,passwd,strlen(passwd)+1,0);
size_read=recv(客户端套接字,响应,BUF_大小,0);
响应[size_read]='\0';//不打印垃圾
printf(“%s”,响应);
//printf(“已发送字节:%d\n”,已发送);
}
返回0;
}
我在工作站上使用来自debian存储库(ftpd)的ftp服务器。我尝试执行此代码,当我向服务器发送密码时,回答500'':命令未理解。
我使用wireshark查看发生了什么,我的程序中的所有包看起来都很好,我使用ftp命令(linux上的轻量级ftp客户端)进行连接,它可以工作,但来自该客户端的包看起来与来自我自己的客户端的包一样。有什么想法吗?

所以,我发现了一个bug:strlen(用户名)而不是strlen(用户名)+1。我希望它能对某人有所帮助。

哦,男人也有类似的问题,你的问题帮助我找到了我的bug=)