![]() |
|
|
![]()
|
|
| Гость_Влад |
|
|||
|
Unregistered |
Товарищи, а что у меня не правельно здесь?
В этом алгоритме при пересылке файла больше 1 Мгб все умирает, где подправить, чтобы алгоритм пересылки был надежен? Клиент: Глобальные переменные: int Size ; TMemoryStream *MS = new TMemoryStream ; Посылка из клиента в событии ClientSocket1Read: MS->LoadFromFile( OpenDialog1->FileName ); MS->Position = 0 P = MS->Memory ClientSocket1->Socket->SendText("Z" + IntToStr(MS->Size)); Size = ClientSocket1->Socket->SendBuf( P , MS->Size ); MS->Clear(); Прием на сервере: Глобальные переменные: bool ful = false; TMemoryStream* MS = new TMemoryStream (); int Size; В событии ServerSocket1ClientRead: S = Socket->ReceiveText(); if(S[1] == 'Z') { ful = true; AnsiString SizeFile = S.SubString(S.Pos("Z")+1,S.Length()); Size = StrToInt(SizeFile); S.Delete( 1 , S.Pos( "Z" ) ) ; return; } if(ful) { Write(S); } else {…другой код} Ф-ция записи Write: void Write( AnsiString Text ) { if(MS->Size < Size { MS->Write( S.c_str() , S.Length() ); } if(MS->Size == Size) { MS->Position = 0 ; CreateDir( "Dow" ); AnsiString Path; Path = SFiles.SubString( SFiles.LastDelimiter( "\\" ) + 1 , SFiles.Length() ); MS->SaveToFile( "Dow\\"+Path ); MS->Clear() ; Size = 0 ; ful = false; } } |
|||
|
||||
| Гость_Влад |
|
|||
|
Unregistered |
Товарищи, найдите ошибку при пересылке файла больше
1 Мгб все умирает, где подправить, чтобы алгоритм пересылки был надежен? Клиент: Глобальные переменные: int Size ; TMemoryStream *MS = new TMemoryStream ; Посылка из клиента в событии ClientSocket1Read: MS->LoadFromFile( OpenDialog1->FileName ); MS->Position = 0 P = MS->Memory ClientSocket1->Socket->SendText("Z" + IntToStr(MS->Size)); Size = ClientSocket1->Socket->SendBuf( P , MS->Size ); MS->Clear(); Прием на сервере: Глобальные переменные: bool ful = false; TMemoryStream* MS = new TMemoryStream (); int Size; В событии ServerSocket1ClientRead: S = Socket->ReceiveText(); if(S[1] == 'Z') { ful = true; AnsiString SizeFile = S.SubString(S.Pos("Z")+1,S.Length()); Size = StrToInt(SizeFile); S.Delete( 1 , S.Pos( "Z" ) ) ; return; } if(ful) { Write(S); } else {…другой код} Ф-ция записи Write: void Write( AnsiString Text ) { if(MS->Size < Size { MS->Write( S.c_str() , S.Length() ); } if(MS->Size == Size) { MS->Position = 0 ; CreateDir( "Dow" ); AnsiString Path; Path = SFiles.SubString( SFiles.LastDelimiter( "\\" ) + 1 , SFiles.Length() ); MS->SaveToFile( "Dow\\"+Path ); MS->Clear() ; Size = 0 ; ful = false; // } } |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |