2017-12-09 4 views
-1

自分のFTPクライアントを作成しようとしているので、FTPサーバーに接続して「220」応答コードを取得できましたが、ANY recv関数はブロックされます。これは私のコードです:Linux Cプログラミング - FTPサーバーがソケット経由で応答しない

私は複数のフリー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; 
} 

答えて

1

まあジョークは、問題は、私は、私はftpサーバに送信されたメッセージに「\ n」を付加していなかったたこと

関連する問題