indy + przesylanie plikow

0

Dlaczego w tym programie klient się po prostu wiesza a serwer nie otrzymuje nic oprócz wielkości pliku jaki ma odebrać??

kod clienta:

TFileStream *fs;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
        IdTCPClient1->Connect();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        OpenDialog1->Execute();
        fs = new TFileStream(OpenDialog1->FileName, fmOpenRead);
        char buffer[512]; int count = 0; int len = fs->Size;
        IdTCPClient1->WriteInteger(len);
        do
        {
                count = fs->Read(buffer, 512);
                IdTCPClient1->WriteBuffer(buffer, count);

        }
        while(count == 512);
}

kod servera:

TFileStream *fs;
int cos = 0;
int received;
int len;
char buffer[512];
void __fastcall TForm1::FormCreate(TObject *Sender)
{
        IdTCPServer1->Active = true;
        fs = new TFileStream("cos.plik", fmCreate);
        received = 0;
        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread)
{
        if(received >= len)
                cos = 0;

        if(cos > 0)
        {
                if(cos == 1){
                        len = AThread->Connection->ReadInteger();
                        cos = 2;
                }
                else
                {
                        if(len - received >= 512)
                        {
                                AThread->Connection->ReadBuffer(buffer, 512);
                                fs->Write(buffer, 512);
                                received += 512;
                        }
                        else
                        {
                                AThread->Connection->ReadBuffer(buffer, len - received);
                                fs->Write(buffer, len - received);
                                received += len - received;
                        }
                }
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        cos = 1;
}
//---------------------------------------------------------------------------
0

To:

        if(received >= len)
                cos = 0;

powinno byc tak

        if((received >= len) && (len > 0))
                cos = 0;

1 użytkowników online, w tym zalogowanych: 0, gości: 1