Я пытаюсь вручную получить файл с ftp-сервера. До сих пор я могу подключиться к серверу и проверить его ответ 220
, но затем я хочу отправить имя пользователя и профайлы, чтобы отобразить некоторые случайные байты. Первый мой код:manully установить соединение с ftp-сервером с помощью сокетов
struct request
{
int reply; /* TRUE = request reply from server */
int msgLen; /* length of message text */
char message[REQUEST_MSG_SIZE]; /* message buffer */
};
...
//ESTABLISH SOCKET CONNECTION
...
/* send request to server */
strcpy(myRequest.message,"ftp");
myRequest.msgLen = 3;
if (write (sFd, (char *) &myRequest, sizeof (myRequest)) == ERROR)
{
perror ("write");
close (sFd);
return ERROR;
}
if (read (sFd, replyBuf, REPLY_MSG_SIZE) < 0) {
perror ("read");
close (sFd);
return ERROR;
}
// CHECK if ser ver responded with code 220
if (strstr(replyBuf,"220")==NULL) {
perror ("Response220");
close (sFd);
return ERROR;
}
// send user name to server
strcpy(myRequest.message,"USER **");
myRequest.msgLen = 7;
if (write (sFd, (char *) &myRequest, sizeof (myRequest)) == ERROR)
{
perror ("write");
close (sFd);
return ERROR;
}
if (read (sFd, replyBuf, REPLY_MSG_SIZE) < 0) {
perror ("read");
close (sFd);
return ERROR;
}
printf ("MESSAGE FROM SERVER:\n%s\n", replyBuf);
, но по какой-то причине, я всегда, кажется, есть некоторые случайные байты в моей отправки строки: первый, FTP-строка выглядит следующим образом:
36 1.767818000 3.94.213.214 3.94.213.53 FTP 70 Request: \356\356\356\356\000\000\000\003ftp\000"\032\244^
который он может иметь дело, ответ сервера:
38 1.777790000 3.94.213.53 3.94.213.214 FTP 74 Response: 220 (vsFTPd 3.0.2)
б ут то строка USER выглядит следующим образом:
40 1.781575000 3.94.213.214 3.94.213.53 FTP 70 Request: \356\356\356\356\000\000\000\aUSER **\000
которой она, не-удивительно, что не может сделать с. После этого я ожидаю, что сервер попросит меня ввести пароль.
Клиент работает на машине VxWorks, а сервер vsFTP на Linux