Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 17

Потоковая передача файлов клиент-сервер

23.05.2011, 12:46. Показов 2892. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Знаю, что тема уже сто раз обсуждалась, но никак не могу добить до конца свою передачу файла.
Использую CAsyncSocket.
Текст передается и принимается нормально, а вот с файлом беда((
VC++ 2008


Передача:

C++
1
2
3
4
5
6
7
8
9
10
11
        int BytesRead;
        int file_size;
    file_size = 1024;
 
    String ^ file_name = "C:\\1.txt";
    FileStream ^ stream = File::OpenRead(file_name);
 
    array<Byte>^Buffer = gcnew array<Byte>(file_size);
 
        BytesRead = stream->Read( Buffer, 0, file_size);
    m_pConnectSocket.Send(&Buffer, BytesRead, 0);
m_pConnectSocket - наследник класса CAsyncSocket

Прием:


C++
1
2
3
4
5
6
7
8
9
10
11
12
        int file_size;
    file_size = 1024;
        int nRead;
    String ^ file_name = "C:\\2.txt";
    FileStream ^ stream = File::OpenWrite(file_name);
 
    array<Byte>^Buffer = gcnew array<Byte>(file_size); 
 
        
    nRead = m_pConnectSocket.Receive(&Buffer, file_size, 0);
    stream->Write( Buffer, 0, nRead);
    stream->Close();
Файл посылаю небольшой, всего пару байт.
В поток при передаче пишется вроде верно, в дебагере высвечивает даже символы, которые записаны в передаваемом txt файле.

Принимается файл правильного размера, вот только вместо нужных символов пустота((((



Так же пробовал на готовой работающей программе клиент-сервер, написанной на Delphi.
1) передача на С++, прием на Delphi:
сохраняется файл правильного размера, но не с пустотой, а с ерундой какой-то.

2) передача на Delphi, прием на С++

В nRead пишет правильный размер
а при попытке записи в поток вылетает с ошибкой

An unhandled exception of type 'System.AccessViolationException' occurred in mscorlib.dll
Additional information: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.


При приеме после строчки
nRead = m_pConnectSocket.Receive(&Buffer, file_size, 0);
nRead отображает правильный размер, а длина Buffer оказывается равной нулю. Думаю из-за этого ошибка памяти, но почему становится равной нулю не понимаю((
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2011, 12:46
Ответы с готовыми решениями:

Передача файлов клиент-сервер-клиент используя Socket
Добрый день! Срочно нужна помощь. Мне нужно передать файлы с клиента на сервер и обратно, используя TServerSocket и TClientSocket. ...

Передача файлов клиент-сервер
Здравствуйте. Мне нужно организовать передачу файла из одной папки в другую. Клиент отправляет,а сервер принимает и записывает в другую...

Клиент сервер передача файлов
Как реализовать передачу файлов между клиентом и сервером?

4
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 17
27.05.2011, 10:09  [ТС]
Тут косяк с объявлением буфера и указатель/не указатель

Решил проблему объявив еще один буфер и тупо переписав данные из одного в другой


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    int file_size;
    file_size = 36000;
    int nRead;
 
    array<Byte>^Buffer = gcnew array<Byte>(file_size); 
    String ^ file_name = "C:\\2.txt";
    FileStream ^ stream = File::OpenWrite(file_name);
 
 
    Byte * Buffer_1;
    Buffer_1 =new Byte[file_size];
 
    nRead = m_pConnectSocket.Receive(Buffer_1, file_size, 0);
 
    if (nRead>0) 
    {
        for (int a=0; a<nRead; a++ )
        {
        Buffer[a] = Buffer_1[a];
        }
    total_size = total_size + nRead; 
    stream->Write( Buffer, 0, nRead);
    }
    
    stream->Close();

Но это как-то каряво + дополнительные затраты ъ

Если кто знает как сделать по-человечески, буду очень признателен
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
27.05.2011, 21:22
Может не стоит мешать native и managed код и тогда все станет проще. Если хотите использовать .NET, то там есть свой класс Socket. Если MFC, то зачем использовать управляемые типы.
0
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 17
30.05.2011, 10:14  [ТС]
Собираю потому что из разных примеров, а обычно не пишут какой именно Си используют.
Не могли бы вы подсказать в какую сторону двигаться мне лучше .Net или MFC. Мне в дальнейшем надо будет с изображениями работать очень плотненько, графики рисовать и по сети всю эту радость перекидывать.. В какую сторону продолжить обучение???
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
30.05.2011, 13:57
Ну, если вы не замечаете в примерах разницы между управляемым и неуправляемым кодом, то наверное, стоит сначала до конца разобраться собственно с языком C++.
По поводу куда двигаться я не могу советовать. Но вот если вы хотите .NET, то, на мой взгляд, лучше перейти на C#.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2011, 13:57
Помогаю со студенческими работами здесь

Клиент сервер, передача файлов по сети
Здравствуйте. Как можно организовать работу приложения чтобы клиент получал от сервера хранящиеся на нем файлы,т.е. выполнить команду,а...

Передача нескольких файлов сервер-клиент в winapi
подскажите пожалуйста, как можно передать сразу несколько файлов от сервера к клиенту. Передавать один получается а вот несколько...

TCP Клиент-Сервер, передача файлов, упрощение кода
TCP Клиент Сервер передача файлов упрощение Вот стартовый пример передачи файлов , я нашкрябал Раклями своими :D от клиента серверу ...

Передача текста в клиент-сервер
Сетевая игра &quot;Пять в ряд&quot;(по типу крестики-нолики). Есть клиент и есть сервер. Заданы IP 127.0.0.1 и порт 2222, нужно сделать так, чтобы...

Передача и получение клиент-сервер
У меня программа- консольное приложение с архитектурой клиент-сервер. Также сервер подключен к базе данных MySQL, что, думаю, не столь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru