【问题标题】:Linux C Programming - FTP server won't respond through socketsLinux C 编程 - FTP 服务器不会通过套接字响应
【发布时间】:2017-12-09 11:17:47
【问题描述】:

所以我正在尝试制作自己的 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;
}

【问题讨论】:

    标签: c linux sockets ftp


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-06-24
      • 1970-01-01
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多