![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
JohnnyQ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 22.7.2007 Где: Санкт_Петербург Репутация: нет Всего: нет |
Добрый день!
Я пишу программу по передаче файлов через TCP. Более-менее настроил клиента и сервера: они обмениваются сообщениями, теперь нужно добавить передачу любого файла между ними. Нашел в сети примерную прогу, но там передача файла сделана как-то совсем уж коряво, до и передает только текстовые файлы... Вопрос: С помощью каких функций лучше всего передавать файл? может у кого пример есть с описанием? |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
точно также как ты обмениваешься сообщениями. файл ничем не отличается от сообщения.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
ExMike |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 22.9.2007 Репутация: нет Всего: нет |
удаленно
Это сообщение отредактировал(а) ExMike - 2.5.2008, 15:46 |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 1 Всего: 47 |
Нафига TCP, если есть FTP?
![]() |
|||
|
||||
ExMike |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 22.9.2007 Репутация: нет Всего: нет |
дайте пример обменна сообщениями,прост совсем не давно начал с сетью работать
простой if(buf == "messagge"); не хочет работать,или как правильнее? ![]() |
|||
|
||||
Олег2005 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
JohnnyQ,
Стандартная функция интерфейса сокетов для передачи файлов - это send() Она шлет содержимое своего буфера - и ей по барабану, что вы в буфер положили - она шлет байты. В Winsock 2.0 есть две специальные функции - TransmitFie() и TransmitPacket(). Открывается нужный файл, передается его хендл и все - функция сама все передаст. |
|||
|
||||
ExMike |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 22.9.2007 Репутация: нет Всего: нет |
удаленно
Это сообщение отредактировал(а) ExMike - 2.5.2008, 15:48 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 6 Всего: 207 |
не путайте понятия TCP - это транспортный уровень, а FTP - прикладной FTP не получится использовать без протокола транспортного уровня (TCP, UDP, ...) Это сообщение отредактировал(а) MAKCim - 1.5.2008, 15:37 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
sergu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
Короче, открываешь файл в бинарном режиме. Читаешь его кусочками, например по 1024 байт в буфер, и отправляешь его. Потом получаешь этот кусочек файла, и дозаписываешь его в конец целевого файла.
|
|||
|
||||
nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
TransmitFile()
|
|||
|
||||
JohnnyQ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 22.7.2007 Где: Санкт_Петербург Репутация: нет Всего: нет |
Попробывал так сделать - работает, но опять только для текстовых файлов... открываю файл вот так Fp=fopen(c,"rb") дальше считываю в цикле с помощью fgets(buffer, 1000, Fp ), ну и потом в том же цикле отправляю кусками файл. Может с fgets что-то ни так в бинарном режиме? |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 1 Всего: 121 |
А справку по fgets читали? Она для чего? В вашем случае надо использоваться fread.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
nerdy_weirdie |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Бох ты мой, какой fread... если уж на то пошло - лучше спроецировать файл на память и отправить целиком. Если под win, то так:
Это сообщение отредактировал(а) nerdy_weirdie - 12.5.2008, 04:45 |
||||
|
|||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 1 Всего: 121 |
И чем же лучше?
Добавлено через 2 минуты и 42 секунды И чем лучше? -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
![]() ![]() 1) Вы хоть представляете себе, как работают эти fread, fwrite? 2) Значительно удобнее. Это сообщение отредактировал(а) nerdy_weirdie - 12.5.2008, 22:36 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |