![]() |
|
Модераторы: xvr |
![]()
|
|
| annushka89 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
самая обычная клиентская и серверная програма(самая простая и передача через 127.0.0.1)
как можно передавать файлы через сокеты(стандартными функциями)? как я поняла, размеры передаваемых файлов через сокеты напрямую зависят от размеров входных буферов, так как же, например, мне передавать файлы, размеры которых гораздо больше размеров входных буферов? конечно, можно буфер сделать и по 1 мб, и 10 мб, но это же нерационально и смешно. Как будет зависеть скорость передачи файлов? 1)Специалисты, помогите советом и привидите пожалуйста протой пример как это организовать 2)как это делают профессионалы(может есть уже готовые классы и стандарты для этой функциональности), помогите, поделитесь опытом пожалуйста всем спасибо |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
annushka89,
передавай данные порциями максимально возможной при данном размере выходного буфера длины Добавлено через 48 секунд annushka89, передавай данные порциями максимально возможной при данном размере выходного буфера длины -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| annushka89 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
это понятно, как рационально выбрать буфер?
может есть специальные протоколы? ответьте пожалуйста на вышезаданные вопросы |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
чем больше, тем лучше твоя задача максимально нагрузить ядро при минимальном количестве системных вызовов -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| annushka89 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
т.е. вы хотите сказать, что буфер можно и 10 мб сделать? по-моему - это просто смешно, и нерациональное использование памяти!!! пришла к выводу, что более подходящий вариант - это 1024 байт(размер буфера) хорошо, скажите, есть ли специальные протоколы по передачи файлов, может приведете пример заранее спасибо |
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
аргументируйте ;) Добавлено через 2 минуты и 49 секунд
File Transfer Protocol все зависит от задачи если клиент и сервер самописные, то никакой протокол по сути не требуется -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| annushka89 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
под буфер придется выделять память, можно выделить и 1000 байт, и 1000000 байт - разница существенная, и хочется как-то разумно распределять ресурсы |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
это не аргументация ;) какая цель программы? передача файла - это основная функция или нет? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| SneG0K |
|
|||
|
Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: нет Всего: 54 |
annushka89, смотри, по протоколу TCP можешь мередавать хоть 100 ГБ - он сам разбивает файл (по 8 кб помоему)
Чезер UDP прийдеться уже самому разбивать файл на кусочки (по 64 кб) |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
SneG0K,
вопрос не в этом при большом буфере можно записать через один системный вызов бОльшее количество данных это лучше по двум причинам 1. уменьшение количества переключений R3<->R1 2. уменьшение общего количества времени блокирования процесса, связанного с латентностью переключения контекста Добавлено через 3 минуты и 1 секунду ну вообще максимальный размер одной порции передаваемых данных находится в пределах от PMTU до ~64K -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| annushka89 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
цель программы - максимизировать скорость передачи файла
что такое PMTU? Добавлено через 2 минуты и 21 секунду
скажите как это понять R3<->R1 и я использую неблокирующие сокеты, т.е. снимаю блокировку |
|||
|
||||
| annushka89 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
скажите пожалуйста, еще как посчитать траффик(кол-во принятой/переданной инфомации в байтах)
т.е. нужно ли учитывать все служебные байты, которые прибавляются к пакетам на уровнях, ниже TCP или же считать, сколько передала "полезной информации" |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
path MTU (Maximum Transmit Unit) минимальный среди MTU всех сегментов сети, через которые проходит пакет, прежде чем дойти до адресата переключение user level <-> ядро тогда mmap + send размер буфера 2 * 64K 64K - максимальный размер IP дейтаграммы
от задачи зависит имхо, нет -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
Если принимать размер буфера как "максимально возможный". Если разбивать данные например с размером кусков порядка метра, то как они будут обрабатываться ОС? Я думаю, что ОС копируя из буфера пользовательского пространства данные:
1. скопирует все (что маловероятно) и будет занимать данными ОЗУ довольно большое время( все зависит от объема внутреннего ОЗУ сетевухи и скорости передачи данных по сети) 2. скопирует лишь часть данных в сетевуху, что во первых забьет ее буфер и во вторых пользовательскому пространству все равно придется ждать сетевуху (или ОС как кому нравится) для продолжения копирования данных. В это время, если использовать для выделения просто область из кучи, придется "держать" (не высвобождать) выделенное пространство до копирования самого последнего байта. Если данные варианты лучше чем разбуение на несколько системных вызовов, то пользуйте, как говориться, на здоровье. Конечно можно обойтись без дополнительной буферизации, но надо ли это?(все равно быстрее не передашь и ОЗУ будет занята до полной передачи) К слову кадр Ethernet может передать около 1,5 КБ данных, остальной объем будет автоматически разбит самой ОС. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| annushka89 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
спасибо Вам большое, решила буфер использовать размером 128 кбайт
|
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
Думаю можно попробовать отправить на обработку через write и посмотреть сколько данных примет ОС. ИМХО не думаю что крайне большие буферы имеет смысл использовать.
|
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
Не думаю что стоит вручную указывать размер (приемного) буфера. TCP на то и придуман, чтобы "это дело" контролировать и выбирать оптимальный вариант... |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
TCP не контролирует размер входных/выходных буферов сокета он может окно изменять и масштабировать его, но в рамках значений размеров буферов -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
MAKCim,
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |