Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача файлов, TCPServer & Client, Indy 10 
V
    Опции темы
Kirgston
Дата 17.9.2010, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Всем доброго времени суток! Собственно пытаюсь реализовать передачу файлов в Инди 10. На соках всё проще... тут никак не пойму что да как... может у кого завалялся примерчик или что то такое? Но мне надо так что бы я смог потом отобразить ход закачки в клиенте (на сервере не обязательно). Спасибо
PM MAIL   Вверх
Domain
Дата 19.9.2010, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 11.3.2010

Репутация: нет
Всего: нет



в инете примеров довала. 
например тут http://programmersforum.ru/showthread.php?...FC+%F4%E0%E9%EB

Это сообщение отредактировал(а) Domain - 19.9.2010, 21:25
PM MAIL   Вверх
Kirgston
Дата 24.9.2010, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Нету там такого чего я просил =), ладно уже извратился сам и написал
PM MAIL   Вверх
mrbrooks
Дата 24.9.2010, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Kirgston, делись с общественностью, камрад  smile 
PM MAIL   Вверх
Kirgston
Дата 24.9.2010, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



mrbrooks,  написал... по крайней мере я так думал, только вот оно у меня , как можно было заметить в соседнем топике, не хочет работать х_х

Может кто подскажет почему?
сервер:
Код

        const int send_len=1024;
        unsigned long seek = 0;
        __int64 b = 0;
        UnicodeString FileName = AContext->Connection->IOHandler->ReadLn();
        TMemoryStream *File=new TMemoryStream();
        File->LoadFromFile(FileName);
        File->Position=0;

        char *buf=new char[send_len];

        while (1)
        {

            __int64 a = File->Read(buf,send_len);
            if (a == 0) {

                AContext->Connection->IOHandler->Write( a );
                break;
            }
            seek+=send_len;
            b = File->Seek(seek,0);

            AContext->Connection->IOHandler->Write( a );
            AContext->Connection->IOHandler->Write(buf);


        }
        delete[] buf;


клиент:

Код

    TC->IOHandler->WriteLn(L"file");
    TC->IOHandler->WriteLn(L"log.txt");

    DWORD Written = 0;
    HANDLE hDestFile = CreateFile(L"log.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    while (1)
    {
        __int64 a = TC->IOHandler->ReadInt64();
        if (a == 0) {
            CloseHandle(hDestFile);
            break;
        }
        AnsiString str =  TC->IOHandler->ReadString(a).w_str();

        WriteFile(hDestFile, str.c_str(), str.Length(), &Written, NULL);


    }

PM MAIL   Вверх
Kirgston
Дата 25.9.2010, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Неужели никто не может подсказать? Казалось бы очень заезженная тема, а все молчат как рыбы :(
PM MAIL   Вверх
mrbrooks
Дата 27.9.2010, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Kirgston, дружище, я не вижу ни чего против использовать FTP для твоих целей. (протокол как бэ для этого и разработан). В индейцах точно были подобные контролы.
PM MAIL   Вверх
xvr
Дата 27.9.2010, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Kirgston @  24.9.2010,  17:09 Найти цитируемый пост)
AContext->Connection->IOHandler->Write(buf);
Было бы неплохо где то указать длину того, что ты пишешь (buf, и длинна a в данном случае)

Цитата(Kirgston @  24.9.2010,  17:09 Найти цитируемый пост)
        AnsiString str =  TC->IOHandler->ReadString(a).w_str();
        WriteFile(hDestFile, str.c_str(), str.Length(), &Written, NULL);

Сие действо вообще непонятно - перекодировки Unicode -> Ansi для бинарных данных не пройдут безнаказанно  smile 

Пользуйся методами передачи/приема массивов байтов (а не строк). Если они конечно в Indy есть (я с ним не работал)  smile 

PM MAIL   Вверх
Kirgston
Дата 27.9.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Цитата(mrbrooks @  27.9.2010,  08:05 Найти цитируемый пост)
Kirgston, дружище, я не вижу ни чего против использовать FTP для твоих целей. (протокол как бэ для этого и разработан). В индейцах точно были подобные контролы.

ФТП будет отдельно smile

Спасибо, проблема полностью решена... к большому сож. нормальной документации нету вообще... это не МСДН где есть подробное(!) описание ф-ций и даже с примерами. Хелп оказался настолько примитивен что мне с ним что без него... разницы нету. То есть через Инди КБ (база знаний) я читал мол "ф-ция такая то, принимает это и то." и всё... это я же мог и увидеть в подсказке билдера. Короче маразм. Начал ковырять сам. В итоге всё очень и очень просто. Файлик бросаем в TFileStream . Отпарвляет размер файлика. И дальше просто в цикле через Write(FileStream,1024 /*тут кол-во байт */, true) передаем. У Файл стрима автоматически будет изменяться позиция. То есть никаких Позишен += 1024 , или FileStream -> Seek... не нужно а в коде просто делаем какое то условие чтобы остановится (если попытаться кинуть за много то будет No Data Read и прога повиснет. В клиенте так же. Только тут уже ReadStream(FileStream, -1, false) , то есть читаем сколько дают . А дальше просто сверяем FileStream -> Position & FileStream -> Size . Вот и всё. Короче ничего сложного оказалось что нет . Но к сож. это всё не документировано и я тупо потратил 3 дня на ковырянием пальцем в небе.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.