Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2010, 21:51   #1
Killbrum
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 206
По умолчанию Передача файлов, TCPServer & Client, Indy 10

Доброго времени суток! Собственно понадобилась прямая передача данных. Думал сделать на сокетах (мне бы проще было) но увы надо использовать один порт, а вся программа уже построена на Инди 10. Так что надо дописывать на Инди 10. Передавать надо файлы. Как это сделать я уже видел =). Только мне надо отображать ход передачи файла хотя бы на клиентской части. Собственно с горем пополам написал нечто. Но оно передает только маленькие файлики (текстовые) причем как понимаю до 1кб. Дальше рид таймаут и т.д. Собственно гугля и юзая справку от РАД Студио 2011 не нашел как правильно работать с TFileStream (предполагаю что баг в том что я криво перемещаюсь по файлу). Собственно...

Сервер:

Код:
                const int send_len=1024;
                unsigned long seek = 0;
                __int64 b = 0;
                UnicodeString FileName = AContext->Connection->IOHandler->ReadLn();
                TFileStream *File=new TFileStream(FileName,fmOpenRead);
                //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);
                        File->Position=seek;
 
                        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);
 
 
        }
Killbrum вне форума Ответить с цитированием
Старый 25.09.2010, 11:24   #2
Killbrum
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 206
По умолчанию

Неужели никто не передавал файлы по сети и выводом прогресса? Можно даже на Делфях ... переведу потом код
Killbrum вне форума Ответить с цитированием
Старый 26.09.2010, 04:57   #3
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Извините, не знаком с классом TFileStream, но взглядом зацепился за:
Код:
File->Read(buf,send_len);
 seek+=send_len;
 b = File->Seek(seek,0);
 File->Position=seek;
Разве его функция Read не перемещает текущую позицию в файле и нужно еще Seek и вдогонку Position? Сомневаюсь.
EUGY вне форума Ответить с цитированием
Старый 26.09.2010, 14:08   #4
Killbrum
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 206
По умолчанию

Да да, я о этом не знал. Но уже всё сделал как надо. Всё работает. Спасибо
Killbrum вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
INDY 10 (idCmdTCPServer & idCmdTCPClient) & Delphi 2009 S_Yevgeniy Работа с сетью в Delphi 24 27.02.2012 08:56
Передача файлов (indy) dolphin705 Работа с сетью в Delphi 2 09.02.2011 19:09
Чат на TCPClient\TCPServer, передача файлов! AquaKlaster Работа с сетью в Delphi 3 18.05.2009 21:03
Передача файлов(exe) при помощи TCPServer и TCPClient Air Работа с сетью в Delphi 6 26.12.2008 23:26
Передача файлов по локальной сети(Indy) Biowulf86 Помощь студентам 1 08.05.2008 13:08