Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Специалистам по сокетам, метод ReceiveBuf 
:(
    Опции темы
Гость_Влад
Дата 30.5.2005, 08:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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;


}
}


  Вверх
Гость_Влад
Дата 30.5.2005, 08:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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"
Rrader

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

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

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

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


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

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


 




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


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

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