Witam wszystkich,
Dotychczas pisząc aplikacje sieciowe mysyłałem tylko sam tekst, ale kiedys musiała przyjśc chwila, kiedy tzreba będzie przesłać JPG'a. Wykorzystałem do tego komponenty INDY (często piszą, że są lepsze od zwykłych TSerwerSocket).
korzystając głównie ze strony http://delphi.ktop.com.tw/topic.asp?TOPIC_ID=64898 stworzyłem coś takiego:
Serwer (mający wysłać plik)
void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread)
{
int i = AThread->Connection->ComponentIndex-1;
if (sendfile)
{
TFileStream* fs = new TFileStream(sendfiledir, fmOpenRead);
int a = fs->Size;
AThread->Connection[i].WriteLn(">>"+IntToStr(a));
AThread->Connection->WriteStream(fs,true,true) ;
sendfile = false;
}
}
void __fastcall TForm1::Button6Click(TObject *Sender)
{
if (OpenDialog1->Execute())
{
sendfiledir = OpenDialog1->FileName;
sendfile = true;
}
}
//Klient (odbierający dane)
void __fastcall TForm1::Button5Click(TObject *Sender)
{
TMemoryStream* fs = new TMemoryStream();
IdTCPClient1->ReadStream(fs ,-1,false);
delete fs;
}
Cały problem polega na tym, że po naciśnięciu Przycisku 5 cały program się zawiesza. Kiedy zamiast TMemoryStream użyje TFileStream plik ma poprawną wielkość, ale nic nie zawiera.
Z początku robiłem równiez coś takiego:
AnsiString ln = ListBox2->Items->Strings[ListBox2->Items->Count - 1];
ln = ln.SubString(3,ln.Length()-2);
int size = StrToInt(ln);
IdTCPClient1->ReadStream(fs ,ln,false);
ale z tym też różnie bywało. Jedno jest wspólne: aplikacja zawsze sie zawiesza a plik nie jest do końca poprawny. Co z tym mozna zrobić? Wielkie dzięki za wszelka pomoc!!
Pozdrawiam.