tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
3610
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    81
    Bin im C++ Builder auf TcpClient und TcpServer gestoßen.
    Habe dann im Internet und hier nach Beispielen etc. gesucht habe aber nichts Großartiges gefunden. (auch in der C++Builder Hilfe nicht).

    Jedenfalls möchte ich wissen ob man damit eine Datei von Computer zu Computer über das Internet schicken kann?
    Anscheinend geht es aber wie?

    Hat jemand eine Idee wo man einen Beispiel Code ,oder eine genaue Beschreibung findet?


    Schonmal Danke in Vorraus.
     

  2. #2
    Registriert seit
    Mar 2004
    Beiträge
    441
    Zitat Zitat von -H-T-P- Beitrag anzeigen
    Hat jemand eine Idee wo man einen Beispiel Code ,oder eine genaue Beschreibung findet?
    Jup.
    Suche mal nach Delphi und TcpClient / TcpServer und vergiß Suchen nach dem CBuilder.
    Delphi und der CBuilder benutzen das gleiche Framework. Alles, was zu Delphi gesagt wird, gilt genauso für den CBuilder, lediglich Sources musst du entsprechend anpassen.
     

  3. #3
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    81
    Hab jetzt auf deinen Vorschlag hin nach Delphi-Sachen gesucht.
    Lieferte mir auch paar Ergebnisse, die mir helfen KÖNNTEN.

    Ich hab jetzt hier zwei Links. Könntet ihr mir helfen, die Codes für meine Zwecke in C++ umzuschreiben?
    Mir genügt schon vorerst einen String von A nach B zu verschicken.

    Wäre sehr Dankbar.



    Die Links:
    http://www.tutorials.de/forum/delphi...helft-mir.html

    http://www.delphipraxis.net/topic17316.html
     

  4. #4
    Registriert seit
    Mar 2004
    Beiträge
    441
    Ok, jetzt hatte ich mal etwas Zeit mir das Ganze anzuschauen.
    Im zweiten von dir geposteten Link ist u.a. dieser Delphi-Code drin:
    Code delphi:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      FStream: TFileStream;
      SizeOfFile: Integer;
      pBuffer: Pointer;
    begin
      FStream := TFileStream.Create('C:\Programme\TEXT22.txt', fmCreate or fmOpenWrite);
      SizeOfFile := TcpClient1.BytesReceived;
      GetMem(pBuffer, SizeOfFile);
     
      try
        TcpClient1.ReceiveBuf(pBuffer^, SizeOfFile);
        FStream.Write(pBuffer^, SizeOfFile);
     
      finally
          FreeMem(pBuffer);
          FStream.Free;
      end;
     
    end;

    Übersetzt nach CBuilder sieht das dann so aus:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      TFileStream *FStream = new TFileStream("C:\Programme\TEXT22.txt", fmCreate || fmOpenWrite);
      int SizeOfFile = TcpClient1->BytesReceived;
      char *pBuffer = (char *) malloc(SizeOfFile);
     
      try
      {
        TcpClient1->ReceiveBuf(pBuffer, SizeOfFile);
        FStream->Write(pBuffer, SizeOfFile);
      }
      __finally
      {
        free(pBuffer);
        delete(FStream);
      }
    }

    Generell (falls du kein Pascal kennst) gilt:
    Procedures sind in C++ einfach nur Funktionen mit void-Rückgabewert (also ohne Rückgabe). Functions sind Funktionen mit einem Rückgabewert, den du dem Funktionsheader entnehmen kannst.
    Unter var sind dann erst einmal alle lokalen Variablen der Funktion deklariert. Instaziiert werden die Dinger meist später. Das ist etwas, was es so nicht zwingend unter C++ gibt. Wenn in Delphi also steht
    Code delphi:
    1
    2
    
    var
      TFileStream: FStream
    , dann heisst das nichts anderes als "in dieser Funktion wird eine Variable FStream verwendet, die vom Typ TFileStream ist". Implizit bedeutet das in Delphi jedoch, daß hier mit einem Pointer gearbeitet wird (da TFileStream kein grundlegender Datentyp ist). Zur echten Verwendung muß unter Delphi dann erst noch eine Instanz von TFileStream erzeugt werden:
    Code delphi:
    1
    
    FStream := TFileStream.Create('C:\Programme\TEXT22.txt', fmCreate or fmOpenWrite);

    Wenn du FStream in C++ deklarieren und dann auch gleich verwenden willst, kannst du es auch sofort instanziieren:
    Code cpp:
    1
    
      TFileStream* FStream = new TFileStream("C:\Programme\TEXT22.txt", fmCreate || fmOpenWrite);


    Ich hoffe, ich konnte dir damit etwas weiterhelfen.
     

  5. #5
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    81
    Ja, da tu ich mir schon schwer bei den oben genannten Links, die in C++ umzuschreiben.

    Habe aber dann noch einen Link gefunden, der (finde ich) ganz leicht zu verstehen ist: http://www.swissdelphicenter.ch/de/showcode.php?id=2213
    Genau nach diesen Code habe ich dann, zum Test, eine Art simblen Chat gemacht, der auch sehr gut funktioniert!

    Jetzt habe ich nur noch eine Frage bevor ich den Thread als "Erledigt" kennzeichne.
    Frage: Wie sende ich jetzt ein File über diese Verbindung?


    Aber schonmal Danke für die bisherige Hilfe!
     

  6. #6
    KingNothing KingNothing ist offline Mitglied Silber
    Registriert seit
    Jan 2009
    Beiträge
    54
    Moin Zusammen,

    Also wenn ich Dich richtig verstanden habe, willst Du bloß ne Datei vom lokalen Rechner auf'n Server bringen oder/und vom Server wieder auf'n lokalen Rechner zurückholen?

    Dafür nehme ich immer die Komponente TIdFTP aus der Komponentenpalette Indy-Clients. Ist glaub' ich bereits ab der 2006er dabei?! Ab 2007 auf jeden Fall!

    Kurzes einfaches Beispiel für Upload
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    IdFTP1->Host = "<namedesservers.de>";
    IdFTP1->Username = "<benutzername>";
    IdFTP1->Password = "<passwort>";
     
    IdFTP1->Connect();
    IdFTP1->ChangeDir("/pfad/zum/verzeichnis");
    IdFTP1->Put("C:\\pfad\\zum\\lokalen\\verzeichnis\\<dateiname.txt>","<serverdateiname>",false);
     
    IdFTP1->Disconnect();

    Der Download sieht genau so aus mit Ausnahme, daß die Put-Methode durch die Get-Methode ersetzt wird
    Code :
    1
    
    IdFTP1->Get("<serverdatei>","C:\\pfad\\zum\\lokalen\\verzeichnis\\<dateiname.txt>",true,false);

    Wie gesagt, wenn's Dir nur darum geht, ist das damit relativ einfach!
     

  7. #7
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    81
    Jein.
    Ich will eine Datei von einem Rechner zu einem anderen Rechner schicken.
    Wahrscheinlich geht das mit Client/Server Komponenten, vielleicht zugar mit den TIdFTP und den TIdFTPServer. Die Frage ist nur wie.

    Also ich wollte eigentlich nicht die Datei auf einen FTP-Server hochladen und dann wieder runterladen. Wäre auch ne Möglichkeit,aber mit meiner Internetverbindung dauert es viel zu lange. Und für größere Dateien ist das dann auch ungünstig.



    Trotzdem muss ich sagen, das ich vor einiger Zeit auf der Suche war, wie man eine Datei auf einen FTP-Server lädt. Und da habe ich lange danach gesucht. Danke!
     

Ähnliche Themen

  1. TcpClient und TcpServer haben keine Verbindung
    Von -H-T-P- im Forum Borland CBuilder und VCL
    Antworten: 15
    Letzter Beitrag: 24.07.09, 09:16
  2. TCPServer/Client: wie Send/Receive Daten?
    Von jupp2oo8 im Forum Borland CBuilder und VCL
    Antworten: 2
    Letzter Beitrag: 07.05.08, 08:28
  3. Antworten: 2
    Letzter Beitrag: 12.02.08, 19:26
  4. BITTE BITTE HILFE ''Laufzeitfehler 713'
    Von anyaa im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 26.04.04, 10:44
  5. Readln mit TcpClient... Bitte helft mir!
    Von bashi im Forum Delphi, Kylix, Pascal
    Antworten: 3
    Letzter Beitrag: 27.10.03, 18:31