Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сокет. Передача файлов. С++.

78K
04 января 2012 года
rocketdeath
1 / / 04.01.2012
Здравствуйте. Меня интересует каким образом можно передать через сокет с клиента на сервер(или наоборот, неважно) бинарный или же исполняемый файл. Видел много примеров передачи содержимого символьного буфера, но без фрагмента кода с открытием фалйа и записью его в буфер, не думаю что бинарный или исполняемый файл можно передавать таким же образом. Пишу на Win7, C++Builder, winsock2 . Если можнос примерами кода.
277
04 января 2012 года
arrjj
1.7K / / 26.01.2011
Код:
//Открываем и читаем _весь_ файл во временный буфер
int fh=FileOpen("имяфайла", fmOpenRead);
int size=FileSeek(fh,0,2);
unsigned char * buff=new unsigned char[size];
FileSeek(fh,0,0);
FileRead(fh,buff,size);
FileClose(fh);
//bind и connect сокета сам сделаешь, раз примеры есть. Хендл сокета нашего ws2.
if(send(ws,(void*)&size,sizeof(int),0)==sizeof(int))//Отсылаем размер файла
{
if(send(ws,buff,size,0)==size)//Отсылаем файл
{
//Успешно
}
else
{
//Не удалось послать файл
}
}
else
{
//Не удалось послать размер
}

//Както так
Инфа по сокету с примером:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740149%28v=vs.85%29.aspx

Хотя имхо при использовании VCL проще былобы сделать через TIdTCPClient/TIdTCPServer
240
11 января 2012 года
aks
2.5K / / 14.07.2006
Цитата: rocketdeath
Видел много примеров передачи содержимого символьного буфера, но без фрагмента кода с открытием фалйа и записью его в буфер, не думаю что бинарный или исполняемый файл можно передавать таким же образом.


Абсолютно без разницы. Нету вобще по сути бинарных там или чисто символьных буферов. Все это набор байт определенной длины. Просто один набор байт ты интерпретируешь как текст, а другой как исполняемый файл. Для компилятора же - это все без разницы. =)

444
20 января 2012 года
patison
323 / / 15.03.2007
по большому счету - да, без разницы. ты открываешь файл на чтение (на стороне того откуда собираешься его передавать), читаешь содержимое - и высылаешь. А на стороне получается собираешь обратно в файл. Единственный нюанс - файл открывать и читать надо как бинарный файл (флаг ios::binary, например для fstream).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог