![]() |
|
Модераторы: feodorv |
![]()
|
|
| Pilligrim |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 9.6.2006 Репутация: нет Всего: 1 |
У меня есть, но как-то воплотить её не так уж легко. Суть: выбираем файл. Берем с него инфу: размер имя. Делим на пакетики по 1,5 Kb(так нужно). И шлем их по очереди. Как только один доходит до пункта назначения, последний рапортует типа: пакет пришел давай следующий. Отправитель шлёт следующий и так до тех пор пока весь файл не перешлем.
Вроде легко, но на практике не очень. Может есть более легкая схема? Подскажите плиз)) |
|||
|
||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Ничего сложного в этой схеме я не вижу, стандартная схема пересылки файлов. С чем проблемы возникли? -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| Pilligrim |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 9.6.2006 Репутация: нет Всего: 1 |
Да в общем проблемы решаемы, и я их решаю, просто отлаживать долго и много. Вот и хотел спросить: есть ли что полегче) Ну да ладно. Еще вопрос есть:
Если я хочу передать например 3 МБ. Можно ли мне в send() указать размер буфера скажем этих же 3 МБ? Отправится ли пакет такой величины? И если да, то как мне его принимать? Ведь он же придет на комп приемник по частям. Подскажите. |
|||
|
||||
| ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Есть ли ограничения на размер посылаемых данных в send() я не знаю, никогда над этим вопросом не задумывался Такой способ посылки лучше не использовать.
Ну и принимай по частям. Это сообщение отредактировал(а) ptr - 30.10.2006, 10:46 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Надо хорошо себе представлять, что делает send(). Вы указываете буфер любого размера - send() передает содержание этого буфера в буфер передачи модуля TCP. Размер этого буфера тоже в принципе можно устанавливать с помощью опции SO_SNDBUF функции setsockopt(). Но в сеть все равно будут уходить IP-пакеты, содержащие не более 1460 байт данных, так как для Эзернета MTU равно 1500 байт. Поэтому на send() программа будет висеть до тех пор, пока все вот так поэтапно не передастся на тот конец - если не сделать сокет неблокирующим или применить асинхронную функцию WSASend() Насчет принимать - беспокоиться не стоит - на той стороне будут висеть на recv() до тех пор, пока не придет сегмент FIN, означающий конец предачи, и recv() вернет при этом 0. |
|||
|
||||
| max0257 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 30.10.2006 Репутация: нет Всего: нет |
А рапортовать-то зачем?
|
|||
|
||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Всё зависит от задачи. Если, например, закончилось место на диске или что-нибудь другое случилось, то лучше передавать серверу/клиенту об ошибке. Иногда это проще сделать именно так, как было сказано. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |