Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
13 / 13 / 8
Регистрация: 22.04.2012
Сообщений: 99

FTP-client на Socket API

02.01.2014, 06:25. Показов 3134. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Решил написать простенький FTP-клиент, всё получилось, кроме команды RETR. При получении файла приходит больше байт, чем надо. Сокеты создаются с параметром SOCK_STREAM. Вот небольшой кусок функции, которая сохраняет файл на стороне клиента, подскажите хотя бы алгоритм решения данной задачи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int fd = open(file,O_WRONLY | O_CREAT);
if (fd>0)
{
    do 
    {
        char buff[8];
        int readed = recv(data_socket,buff,sizeof(buff),MSG_WAITALL);
        printf ("%d \r\n",readed);
        if (readed == 0)
        break;
        else if (readed < 0)
        {
            perror ("Error data reading from server\r\n");  
            break;  
        }   
        else        
            write(fd,buff,readed);
    } while (1);
    return_value = 0;
}
close(fd);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.01.2014, 06:25
Ответы с готовыми решениями:

Socket: Client & Server
Нужен квалифицированный совет! Существует устройство, на котором стоит ОС Linux. Это устройство соединено с ПК с Win. Это...

FTP client
Здравствуйте. У меня задание - написать простенький ftp-клиент, не используя стандартных классов типа CInternetConnection, а используя...

Nodejs net socket server and android socket client
Добрый день Форумчане нужно помощь гуру! Решил с другом написать сервер на ноде с использование сокетов и андроид клиент отправки сокет. Но...

12
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.01.2014, 14:14
Цитата Сообщение от Большой_Стен Посмотреть сообщение
open(file,O_WRONLY | O_CREAT);
- попробуй открыть в бинарном режиме
1
13 / 13 / 8
Регистрация: 22.04.2012
Сообщений: 99
03.01.2014, 16:30  [ТС]
Я кстати попробовал переписать цикл загрузки в стиле "считать сколько байт получено и так до тех пор, пока это кличество байт не равно размеру файла", но опять не то.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
03.01.2014, 16:40
Цитата Сообщение от Большой_Стен Посмотреть сообщение
char buff[8];
Почему так мало? 8 чаров . А если больше передадут?
И строку заполнить нулями нужно,
memset-ом
или просто
C++
1
char ch[256] = {{'\0'}};
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.01.2014, 16:52
Большой_Стен, писать и читать следует в бинарном режиме(толк от ФТП если передаём лишь текст), в остальном если ты не накосил в send-е и не использовал невыровнянных через pragm-у структур проблем быть не должно. Приведи пример сколкьо байт передаёшь и сколько приходит
0
13 / 13 / 8
Регистрация: 22.04.2012
Сообщений: 99
03.01.2014, 17:49  [ТС]
Если передаю небольший текстовый файл то вроде всё норм, но если передать картинку, то как раз проблемы (Filezilla как-то с ними справляется). Например, на сервере картинка весит 92 021 байт, если после отправки команды RECV вызывать recv пока она не будет возвращать 0, то придёт 92 274 байт.
Да, кстати, сервер не мой, использую proftpd.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.01.2014, 20:31
Большой_Стен, проблема проста - ты читаешь файл в текстовом режиме и пишешь в нём же.
1
13 / 13 / 8
Регистрация: 22.04.2012
Сообщений: 99
03.01.2014, 20:34  [ТС]
Точно, сейчас читал про команду TYPE, мне на стороне клиента надо по расширению определять какой режим нужен
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.01.2014, 20:48
Цитата Сообщение от Большой_Стен Посмотреть сообщение
Точно, сейчас читал про команду TYPE, мне на стороне клиента надо по расширению определять какой режим нужен
- не надо ничего определять, всегда следует передавать в двоичном режиме, текстовику от такой передачи ничего не станется, а всё остальное хотябы дойти до клиента сможет
1
13 / 13 / 8
Регистрация: 22.04.2012
Сообщений: 99
03.01.2014, 21:20  [ТС]
Передаю в бинарном режиме картинку jpeg, поставил TYPE I, картинка прочиталась на стороне клиента, но размер её больше, чем на сервере. Наверно, надо получать столько байт, сколько написано в ответе на RECV, а не "пока recv не вернёт 0".
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.01.2014, 21:31
Большой_Стен, покажи как читаешь и запуливаешь в send
0
13 / 13 / 8
Регистрация: 22.04.2012
Сообщений: 99
03.01.2014, 22:21  [ТС]
Сервер же не мой, а proftpd
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.01.2014, 12:06
Цитата Сообщение от Большой_Стен Посмотреть сообщение
Сервер же не мой, а proftpd
- если нет представления о том в каком виде они передаются то задача становится почти неразрешимой.
Цитата Сообщение от Большой_Стен Посмотреть сообщение
if (readed == 0)
- поставь условием равенства readed == SOCKET_ERROR
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.01.2014, 12:06
Помогаю со студенческими работами здесь

Передать файл через socket или через ftp api
Посоветуйте как поступить: Есть файл на устройстве его нужно загрузить на сервер. 1 Загружать через socket, создав на сервере...

Windows socket server python + socket client js
Здравствуйте пытаюсь решить такую задачу, на веб странице реализовал soket клиент на js, и socket server, сокет сервер получает данные от...

Socket Android Client and Java Socket Server
Доброго времени суток.Пытаюсь сделать простое клиент-серверное приложение. Клиент - приложение на Android устройстве. Сервер - Приложение...

Socket Client
Столкнулся с такой проблемой - не знаю как реализовать клиент на сокете. В общем мне нужна такая система. 1 клиент отправляет данные на...

Socket client
Всем доброго дня! Подскажите как ?. Есть АТС (на Asterisk), я умею с ней обращаться из клиентского windows приложения. Т.е. могу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru