Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача файлов через сокеты 
:(
    Опции темы
annushka89
Дата 8.5.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



самая обычная клиентская и серверная програма(самая простая и передача через 127.0.0.1)

как можно передавать файлы через сокеты(стандартными функциями)?

как я поняла, размеры передаваемых файлов через сокеты напрямую зависят от размеров входных буферов, так как же, например,  мне передавать файлы, размеры которых гораздо больше размеров входных буферов?

конечно, можно буфер сделать и по 1 мб, и 10 мб, но это же нерационально и смешно.
Как будет зависеть скорость передачи файлов?

1)Специалисты, помогите советом и привидите пожалуйста протой пример как это организовать

2)как это делают профессионалы(может есть уже готовые классы и стандарты для этой функциональности), помогите, поделитесь опытом пожалуйста

всем спасибо
PM MAIL   Вверх
MAKCim
Дата 8.5.2009, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



annushka89
передавай данные порциями максимально возможной при данном размере выходного буфера длины

Добавлено через 48 секунд
annushka89
передавай данные порциями максимально возможной при данном размере выходного буфера длины


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
annushka89
Дата 8.5.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



это понятно, как рационально выбрать буфер?
может есть специальные протоколы?
ответьте пожалуйста на вышезаданные вопросы
PM MAIL   Вверх
MAKCim
Дата 8.5.2009, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(annushka89 @  8.5.2009,  17:19 Найти цитируемый пост)
это понятно, как рационально выбрать буфер?

чем больше, тем лучше
твоя задача максимально нагрузить ядро при минимальном количестве системных вызовов


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
annushka89
Дата 8.5.2009, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



Цитата(MAKCim @ 8.5.2009,  17:43)
чем больше, тем лучше
твоя задача максимально нагрузить ядро при минимальном количестве системных вызовов

т.е. вы хотите сказать, что буфер можно и 10 мб сделать?
по-моему - это просто смешно, и нерациональное использование памяти!!!

пришла к выводу, что более подходящий вариант - это 1024 байт(размер буфера)

хорошо, скажите, есть ли специальные протоколы по передачи файлов, может приведете пример
заранее спасибо
PM MAIL   Вверх
MAKCim
Дата 9.5.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(annushka89 @  8.5.2009,  20:59 Найти цитируемый пост)
по-моему - это просто смешно, и нерациональное использование памяти!!!

аргументируйте ;)

Добавлено через 2 минуты и 49 секунд
Цитата(annushka89 @  8.5.2009,  20:59 Найти цитируемый пост)
хорошо, скажите, есть ли специальные протоколы по передачи файлов

File Transfer Protocol

все зависит от задачи
если клиент и сервер самописные, то никакой протокол по сути не требуется


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
annushka89
Дата 9.5.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



Цитата(MAKCim @ 9.5.2009,  00:59)
Цитата(annushka89 @  8.5.2009,  20:59 Найти цитируемый пост)
по-моему - это просто смешно, и нерациональное использование памяти!!!

аргументируйте ;)

под буфер придется выделять память, можно выделить и 1000 байт, и 1000000 байт - разница существенная, и хочется как-то разумно распределять ресурсы
PM MAIL   Вверх
MAKCim
Дата 10.5.2009, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(annushka89 @  9.5.2009,  22:30 Найти цитируемый пост)
под буфер придется выделять память, можно выделить и 1000 байт, и 1000000 байт - разница существенная, и хочется как-то разумно распределять ресурсы 

это не аргументация ;)

какая цель программы?
передача файла - это основная функция или нет?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
SneG0K
Дата 10.5.2009, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



annushka89, смотри, по протоколу TCP можешь мередавать хоть 100 ГБ - он сам разбивает файл (по 8 кб помоему)
Чезер UDP прийдеться уже самому разбивать файл на кусочки (по 64 кб)
PM WWW Skype   Вверх
MAKCim
Дата 10.5.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



SneG0K
вопрос не в этом
при большом буфере можно записать через один системный вызов бОльшее количество данных
это лучше по двум причинам
1. уменьшение количества переключений R3<->R1
2. уменьшение общего количества времени блокирования процесса, связанного с латентностью переключения контекста

Добавлено через 3 минуты и 1 секунду
Цитата(SneG0K @  10.5.2009,  09:46 Найти цитируемый пост)
по 8 кб помоему

ну вообще максимальный размер одной порции передаваемых данных находится в пределах от PMTU до ~64K


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
annushka89
Дата 10.5.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



цель программы - максимизировать скорость передачи файла
что такое PMTU?

Добавлено через 2 минуты и 21 секунду
Цитата(MAKCim @ 10.5.2009,  10:05)
при большом буфере можно записать через один системный вызов бОльшее количество данных
это лучше по двум причинам
1. уменьшение количества переключений R3<->R1
2. уменьшение общего количества времени блокирования процесса, связанного с латентностью переключения контекста

скажите как это понять R3<->R1 

и я использую неблокирующие сокеты, т.е. снимаю блокировку
PM MAIL   Вверх
annushka89
Дата 10.5.2009, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



скажите пожалуйста, еще как посчитать траффик(кол-во принятой/переданной инфомации в байтах)
т.е. нужно ли учитывать все служебные байты, которые прибавляются к пакетам на уровнях, ниже TCP или же считать, сколько передала "полезной информации"
PM MAIL   Вверх
MAKCim
Дата 10.5.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(annushka89 @  10.5.2009,  18:35 Найти цитируемый пост)
что такое PMTU?

path MTU (Maximum Transmit Unit)
минимальный среди MTU всех сегментов сети, через которые проходит пакет, прежде чем дойти до адресата

Цитата(annushka89 @  10.5.2009,  18:35 Найти цитируемый пост)
скажите как это понять R3<->R1 

переключение user level <-> ядро

Цитата(annushka89 @  10.5.2009,  18:35 Найти цитируемый пост)
цель программы - максимизировать скорость передачи файла

тогда mmap + send
размер буфера 2 * 64K
64K - максимальный размер IP дейтаграммы

Цитата(annushka89 @  10.5.2009,  18:57 Найти цитируемый пост)
т.е. нужно ли учитывать все служебные байты, которые прибавляются к пакетам на уровнях, ниже TCP или же считать, сколько передала "полезной информации" 

от задачи зависит
имхо, нет


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
fry
Дата 10.5.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: нет
Всего: 3



Если принимать размер буфера как "максимально возможный". Если разбивать данные например с размером кусков порядка метра, то как они будут обрабатываться ОС? Я думаю, что ОС копируя из буфера пользовательского пространства данные:
1. скопирует все (что маловероятно) и будет занимать данными ОЗУ довольно большое время( все зависит от объема внутреннего ОЗУ сетевухи и скорости передачи данных по сети)
2. скопирует лишь часть данных в сетевуху, что во первых забьет ее буфер и во вторых пользовательскому пространству все равно придется ждать сетевуху (или ОС как кому нравится) для продолжения копирования данных. В это время, если использовать для выделения просто область из кучи, придется "держать" (не высвобождать) выделенное пространство до копирования самого последнего байта.
Если данные варианты лучше чем разбуение на несколько системных вызовов, то пользуйте, как говориться, на здоровье. Конечно можно обойтись без дополнительной буферизации, но надо ли это?(все равно быстрее не передашь и ОЗУ будет занята до полной передачи)
К слову кадр Ethernet может передать около 1,5 КБ данных, остальной объем будет автоматически разбит самой ОС.
PM MAIL   Вверх
MAKCim
Дата 11.5.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(fry @  10.5.2009,  21:31 Найти цитируемый пост)
скопирует все (что маловероятно) 

так и есть



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.