0
데이터 포트에 연결할 수 없습니다. 21 개의 명령 포트에 연결하여 사용자 이름과 암호를 보낼 수 있습니다. 그런 다음 PASV\r\n
을 보냅니다. 응답을 받고 데이터 포트 A * 256 + B = new_port
을 계산합니다. 문제는이 포트에 연결할 수 없다는 것입니다. 소켓을 만들려면 createRemoteConnection()
기능을 사용하고 있습니다. 그것은 두 번, 명령 포트에 대한 처음 사용하고 내가 거기에 new_port
전달하고 다시 한 번 호출합니다. 제발 도와 주실 수 있습니까? 고맙습니다.FTP, 수동 모드. 요청한 주소를 할당 할 수 없습니다.
PASV
227 Entering Passive Mode (80,251,0,59,158,36).
A: 158
B: 36
Port: 40484
Creating socket...
Socket created
connect failed. Error: Can't assign requested address
-
int createRemoteConnection(Arguments &arguments,int cmd) {
int sock;
struct sockaddr_in server;
if (DEBUG) {
puts("Creating socket...");
}
//Create socket
sock = socket(AF_INET , SOCK_STREAM , 0);
if (sock == -1)
{
fputs("Could not create socket.\n",stderr);
exit(1);
}
if (DEBUG) {
puts("Socket created");
}
char ip[100];
struct hostent *he;
struct in_addr **addr_list;
if ((he = gethostbyname(arguments.hostname)) == NULL) {
herror("gethostbyname");
exit(1);
}
addr_list = (struct in_addr **) he->h_addr_list;
for (int i = 0; addr_list[i] != NULL; i++) {
strcpy(ip, inet_ntoa(*addr_list[i]));
}
server.sin_addr.s_addr = inet_addr(ip);
server.sin_family = AF_INET;
server.sin_port = htons(cmd);
//Connect to remote server
if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
{
perror("connect failed. Error");
exit(1);
}
if (DEBUG) {
puts("Connected\n");
}
return sock;
}
'RETR'을 보내고'425 PORT 또는 PASV를 먼저 사용하십시오. '라는 메시지가 나오면'PASV'를 보내고 계속해서 데이터 소켓을 만들려고했지만 이전과 같은 오류로 실패했습니다. –
'PASV'를 보낸 다음'RETR'을 보내고 포트에 연결을 시도하십시오. –
+ 동일한 컴퓨터에서 실행되는 독립 실행 형 FTP 클라이언트를 사용하여 파일을 다운로드 할 수 있습니까? –