Mehrere Dateien übertragen



  • Hallo Leute!
    Ich möchte mehrere Dateien aus einem Verzeichnis zu einem anderen Computer übertragen. Leider läuft im Code nicht alles synchron. Hat einer eine Idee wie ich das vielleicht noch lösen könnte oder Verbesserungsvrschläge für den Code??
    Client:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <stdio.h>
    #include <fstream.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    TMemoryStream *memsend=new TMemoryStream();
    int img_size=0;
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
       CopyStop=false;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    ClientSocket1->Open();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
    {
      // analyse ErrorEvent
      String Msg = "Unspecified ClientSocket error.";
      switch(ErrorEvent)
      {
        case eeGeneral :
          Msg = "The socket received an error message that does not fit into any category.";
        case eeSend :
          Msg = "An error occurred when trying to write to the socket connection.";
          break;
        case eeReceive :
          Msg =  "An error occurred when trying to read from the socket connection.";
          break;
        case eeConnect :
          Msg = "A connection request that was already accepted could not be completed.";
          break;
        case eeDisconnect :
          Msg = "An error occurred when trying to close a connection.";
          break;
        case eeAccept :
          Msg = "A problem occurred when trying to accept a client connection request.";
      }
      Application->MessageBox(Msg.c_str(), "ClientSocket Error", MB_OK | MB_ICONSTOP);
    
      // prevent exception
      ErrorCode = 0;
    }
    //---------------------------------------------------------------------------
    void TForm1::BackupDirectory (char *qpath)
    {
    int erg=0;
    struct TSearchRec SR;
    char qpath2 [500];
    
    strcpy (qpath2,qpath);
    if (qpath2[strlen (qpath2)-1]=='\\')
    strcat (qpath2,"*.*");
    
    FindFirst(qpath2,faAnyFile,SR);
    
    strcpy (qpath2,qpath);
    
         while (erg==0)
         {
           Application->ProcessMessages();
            if (CopyStop==true) return;
    
            strcpy (qpath2,qpath);
    
            if (qpath2[strlen (qpath2)-1]=='\\')
                       strcat (qpath2,SR.Name.c_str());
    
            if (SR.Name!="."&&SR.Name!=".."&&(SR.Attr&faDirectory)<=0)
            {
                ClientSocket1->Socket->SendText (SR.Name);
                senden (qpath2, SR.Name);
            }
    
              erg=FindNext (SR);
    
         }
    }
    
    //----------------------------------------------------------
    
    void TForm1::senden (char *qpath, AnsiString FileName)
    {
    char *path5="C:\\sordner\\";
    char path6 [500];
    strcpy (path6,path5);
    strcat (path6,FileName.c_str());
    AnsiString status;
    char string [5];
    
    while (status!="_get")
    {
       status=ClientSocket1->Socket->ReceiveText();
       Application->ProcessMessages();
       if (CopyStop==true) status="_get";
    }
    
    Memo1->Lines->Add (FileName);
    
    TFileStream* datei= new TFileStream (qpath,fmOpenRead);
       memsend->LoadFromStream (datei);
      img_size = memsend->Size;
    
      memsend->Seek(0, soFromBeginning);
      memsend->Read(string, 4);
      memsend->Seek(0, soFromEnd);
      memsend->Write(string, 4);
    
      memsend->Seek(0, soFromBeginning);
      memsend->Write(&img_size, 4);
    
      img_size = 0;
    
      memsend->Seek(0, soFromBeginning);
      ClientSocket1->Socket->SendBuf(memsend->Memory,memsend->Size);
      delete datei;
      memsend->Clear();
    }
    
    //-----------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    CopyStop=true;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::hh(TObject *Sender, TCustomWinSocket *Socket)
    {
      BackupDirectory ("C:\\n\\");
    }
    //---------------------------------------------------------------------------
    

    Server:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <jpeg.hpp>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    TMemoryStream *mem=new TMemoryStream(); 
    int img_size=0; 
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    Stream_Exist=false;
    i=0;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::onread(TObject *Sender, TCustomWinSocket *Socket)
    {
    char path [200],path2 [200];
    strcpy (path2,"C:\\sicherung\\");
    img_size=0;
    
     if (Stream_Exist==true)
     {
     int bufsize = Socket->ReceiveLength();
      BYTE *Buffer = new BYTE[bufsize];
    
      mem->Seek(0, soFromEnd);
      Socket->ReceiveBuf(Buffer, bufsize);
      mem->Write(Buffer, bufsize);
      delete [] Buffer;
    
         if (img_size == 0)
         {
    
              mem->Seek(0, soFromBeginning);
              mem->Read(&img_size, 4);
         }
    
        if (mem->Size == (img_size + 4))
        {
    
         char ch[5];
         mem->Seek(-4, soFromEnd);
         mem->Read(ch, 4);
         mem->Seek(0, soFromBeginning);
         mem->Write(ch, 4);
    
               mem->Size -= 4;
    
              mem->Seek(0, soFromBeginning);
              datei->CopyFrom (mem,mem->Size);
              mem->Clear();
              delete datei;
              Stream_Exist=false;
    
        }
    
     }
    
      if (Stream_Exist==false)
      {
    
       AnsiString FileName;
        FileName=Socket->ReceiveText();
    
       strcpy (path,path2);
       strcat (path,FileName.c_str ());
       Memo1->Lines->Add (FileName);
       Label1->Caption=i;
       ServerSocket1->Socket->Connections[0]->SendText ("_get");
    
       datei=new TFileStream (path,fmCreate);
    
      Stream_Exist=true;
      i++;
      img_size=0;
      }
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::sadsad(TObject *Sender, TCustomWinSocket *Socket,
          TErrorEvent ErrorEvent, int &ErrorCode)
    {
      // analyse ErrorEvent 
      String Msg = "Unspecified ClientSocket error."; 
      switch(ErrorEvent) 
      { 
        case eeGeneral : 
          Msg = "The socket received an error message that does not fit into any category."; 
        case eeSend : 
          Msg = "An error occurred when trying to write to the socket connection."; 
          break; 
        case eeReceive : 
          Msg =  "An error occurred when trying to read from the socket connection."; 
          break; 
        case eeConnect : 
          Msg = "A connection request that was already accepted could not be completed."; 
          break; 
        case eeDisconnect : 
          Msg = "An error occurred when trying to close a connection."; 
          break; 
        case eeAccept : 
          Msg = "A problem occurred when trying to accept a client connection request."; 
      } 
      Application->MessageBox(Msg.c_str(), "ClientSocket Error", MB_OK | MB_ICONSTOP); 
    
      // prevent exception 
      ErrorCode = 0;
    }
    //---------------------------------------------------------------------------
    


  • Naja. Vielleicht war mein Beitrag auch ein bischen dumm gestellt. Der Code wie ich ihn da habe funktioniert so nicht. Es wird nur eine Datei übertragen. Dann stürzt das Programm ab. Ich denke so wie ich das in dem Code realisiert habe kann man das nicht machen. Könnte mir vielleicht von euch jemand sagen wie er mehrere Dateien übertragen würde? Eine Datei bekomme ich hin aber mehrere nicht....
    Ich wäre um viele Antworten dankbar



  • gleichzeitig oder nacheinander (alla ICQ,MSN)?



  • Die Dateien sollen nacheinander übertragen werden. Ich habe das jetzt endlich nach vielem hin und her hinbekommen. Wie würdest du das den machen DJBlackEagle? Vielleicht ist deine Methode ja eleganter.


Anmelden zum Antworten