Linux C编程-FTP服务器赢得';不能通过插座响应

Linux C编程-FTP服务器赢得';不能通过插座响应,c,linux,sockets,ftp,C,Linux,Sockets,Ftp,因此,我尝试创建自己的FTP客户端,我能够连接到FTP服务器并获得“220”响应代码,但当我尝试发送任何命令时,recv功能就会被阻止。这是我的代码: 我尝试了多个免费的ftp服务器,我能够连接到所有这些服务器并获得220响应代码,但从那里我根本无法与它们通信 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #inc

因此,我尝试创建自己的FTP客户端,我能够连接到FTP服务器并获得“220”响应代码,但当我尝试发送任何命令时,recv功能就会被阻止。这是我的代码:

我尝试了多个免费的ftp服务器,我能够连接到所有这些服务器并获得220响应代码,但从那里我根本无法与它们通信

#include <stdio.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

#define ERR(str) {printf("%s errno says: %s\n", str, strerror(errno));}

int getFTPcode(int sock){
    char response[2550];
    if(0 > recv(sock, response, 2550, 0)){
        ERR("ftp response failed to recv");
        return 0;
    }
    printf("%s\n", response);
    while(1){
        char msg[2000];
        printf("Enter command:");
        scanf("%s", msg);
        if(0 > send(sock, msg, strlen(msg), 0)){
            ERR("failed to send to server");
            return 0;
        }

        if(0 > recv(sock, response, 2000, 0)){
            ERR("failed to recv from server");
            return 0;
        }
        printf("Response: %s\n", response);
    }


    printf("%s\n", response);
}

int connToOrig(char* ip, short port){

    struct sockaddr_in addrin;
    memset(&addrin, '0', sizeof(struct sockaddr_in));
    addrin.sin_family = AF_INET;
    addrin.sin_port = htons(port);

    if(inet_pton(AF_INET, ip, &addrin.sin_addr) < 0){
        ERR("inet_pton failed");
        return 0;
    }

    int sock;
    if(0 > (sock = socket(AF_INET, SOCK_STREAM, 0))){
        ERR("socket() failed");
        return 0;
    }

    if(connect(sock, (struct sockaddr*)&addrin, sizeof(addrin)) < 0){
        ERR("connection to the origin server failed");
        return 0;
    }


    printf("connection succesfull\n");
    getFTPcode(sock);
    return 1;
}

int main(int argc, char** argv){

    connToOrig(argv[1], 21);
    return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义ERR(str){printf(“%s errno说:%s\n”,str,strerror(errno));}
int getFTPcode(int sock){
字符响应[2550];
如果(0>recv(sock,response,2550,0)){
错误(“ftp响应接收失败”);
返回0;
}
printf(“%s\n”,响应);
而(1){
char-msg[2000];
printf(“输入命令:”);
scanf(“%s”,msg);
如果(0>发送(sock、msg、strlen(msg)、0)){
错误(“发送到服务器失败”);
返回0;
}
如果(0>recv(sock,response,2000,0)){
错误(“无法从服务器接收”);
返回0;
}
printf(“响应:%s\n”,响应);
}
printf(“%s\n”,响应);
}
int connToOrig(字符*ip,短端口){
addrin中的结构sockaddr_;
memset(&addrin,'0',sizeof(struct sockaddr_in));
addrin.sin_family=AF_INET;
addrin.sin_port=htons(port);
if(内部地址(自动内部地址、ip地址和地址单地址)<0){
错误(“inet_pton失败”);
返回0;
}
int袜子;
if(0>(sock=socket(AF\u INET,sock\u STREAM,0))){
错误(“套接字()失败”);
返回0;
}
if(connect(sock,(struct sockaddr*)&addrin,sizeof(addrin))<0){
错误(“与源服务器的连接失败”);
返回0;
}
printf(“连接成功\n”);
getFTPcode(sock);
返回1;
}
int main(int argc,字符**argv){
connToOrig(argv[1],21);
返回0;
}

我开玩笑说,问题是我没有在发送到ftp服务器的消息中附加“\n”