Stream per TCP übertragen!?



  • Hi,
    weiß zufällig jemand wie ich mit den Indy TCP Server und Client komponenten einen Stream übertrage!? WriteLn() etc klappt nur scheint WriteStream() nicht alle Daten zu übertragen (das ganze ist ein PNG, der client sagt mir dann, dass der header corrupted is). Bist jetzt hab ich es mit TStringStream und TMemoryStream versucht, TFileStream geht nicht, da das PNG nich aus ner Datei kommt, sondern generiert wird. Hat vielleivht jmd. eine idee wie man das richtig macht!?



  • Hab das nur mal via Socket Client/Server gemacht ... vielleicht hilft dir das weiter!

    //Senden
    TFileStream *out = new TFileStream("C:\\...", fmOpenRead);
    out->Seek(0,soFromBeginning);
    char buf[1024]; //Buffer
    int c,b;    //Testvariabeln
    
    //Solange senden bis Buffer nichtmehr voll geschriben wird,
    //also Datei zu ende ist
    do
    {
    //Auslesen der zu sendenden Informationen
    b = out->Read(buf,sizeof(buf));
    //Senden des Buffers
    c = ClientDataSocket2->Socket->SendBuf(buf,b);
    
    //Falls nicht gesendet werden konnt, also interner Speicher voll war,
    //solange warten, bis gesendet werden kann
    while(c == -1)
    {
    //Sleep(10);
    c = ClientDataSocket2->Socket->SendBuf(buf,b);
    }
    }while(b == sizeof(buf));
    delete out;
    
    //Empfangen
    TFileStream *in = new TFileStream(SavePath, fmCreate);;
    char buf[1024]; //Buffer
    int c;  //Testvariabel
    
    //Daten auslesen und Größe speichern
    c = Socket->ReceiveBuf(buf,sizeof(buf));
    //Falls Daten gelesen in Filestream speichern
    if(c != -1)
       {
        in->Write(buf,c);
       }
    delete in;
    

    good luck 😉

    ...hoffe das da nichts fehlt


Anmelden zum Antworten