-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;
}