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;
}
//---------------------------------------------------------------------------