AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Frage zu Dateiransfer mit Indy
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Dateiransfer mit Indy

Ein Thema von Bit_Solo · begonnen am 23. Okt 2008 · letzter Beitrag vom 24. Okt 2008
Antwort Antwort
Bit_Solo

Registriert seit: 7. Jul 2005
21 Beiträge
 
#1

Frage zu Dateiransfer mit Indy

  Alt 23. Okt 2008, 23:53
Hallo,

hoffe ich bin im richtigen Forum.
Man kann ja mit Hilfe von einer idTCPClient Kompo eine Datei an einen idTCPServer übermitteln. Ist es möglich, das ich auch vom idTCPServer eine Datei an einen idTCPClient sende?
Wenn ja, evtl. einen kleinen Hinweis in die richtige Richtung.
Ich goolge und suche nun schon eine Weile, aber finde halt nur vom Client zum Server.

Danke
  Mit Zitat antworten Zitat
Benutzerbild von hincapie
hincapie

Registriert seit: 24. Mär 2005
200 Beiträge
 
Delphi 5 Professional
 
#2

Re: Frage zu Dateiransfer mit Indy

  Alt 24. Okt 2008, 08:32
Schau Dir mal diesen Thread an:
Beispiel zum Versenden von Dateien mit Indy
  Mit Zitat antworten Zitat
Bit_Solo

Registriert seit: 7. Jul 2005
21 Beiträge
 
#3

Re: Frage zu Dateiransfer mit Indy

  Alt 24. Okt 2008, 19:25
Ja, das kenne ich. Meine Frage ist aber, ob der Server auch ein File an den Client senden kann. Ist ja in dem Beispiel nicht so.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Frage zu Dateiransfer mit Indy

  Alt 24. Okt 2008, 19:41
Ja, das geht. Sobald due einen TIdPeerThread hast, kannst du mitConnection.WriteBuffer(MessageRecord, SizeOf(MessageRecord), True); Daten versenden. Den TIdPeerThread bekommst du entweder in einem Event, oder du speicherst sie in einem Array (Beim Connecten entsteht ein Event mit einem PeerThread) zwischen.

Möglicherweise hat der TIdTCPServer auch eine Liste, da könntest du es auch herbekommen.

(Kann aber sein, dass das bei einer anderen Indy-Version anders ist ...)
  Mit Zitat antworten Zitat
Bit_Solo

Registriert seit: 7. Jul 2005
21 Beiträge
 
#5

Re: Frage zu Dateiransfer mit Indy

  Alt 24. Okt 2008, 20:07
also
im Event von ServerExecute(AThread: TIdPeerThread) --> AThread.Connection.Socket.Binding.ID ?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: Frage zu Dateiransfer mit Indy

  Alt 24. Okt 2008, 20:37
Also unter Indy 10 sollte es so laufen:
Delphi-Quellcode:
TMyForm.MyServerExecute(AContext: TIdContext);
  var
    lCmd: string;
  begin
    lCmd := Trim(AContext.Connection.IOHandler.ReadLn);
    if AnsiSameText(lCmd, 'HELP') then
    begin
        AContext.Connection.IOHandler.WriteLn('HELP');
        AContext.Connection.IOHandler.WriteLn('QUIT');
        AContext.Connection.IOHandler.WriteLn('GETTIMESTAMP');
        AContext.Connection.IOHandler.WriteLn('');
    end

    else if AnsiSameText(lCmd, 'QUIT') then
    begin
        AContext.Connection.IOHandler.WriteLn('Goodbye...');
        AContext.Connection.IOHandler.WriteLn('');
        AContext.Connection.Disconnect;
    end

    else if AnsiSameText(lCmd, 'GETTIMESTAMP') then
    begin
        AContext.Connection.IOHandler.WriteLn(
          FormatDateTime(Now, 'yyyy-mm-ddThh:nn:ss.zzz'));
        AContext.Connection.IOHandler.WriteLn('');
    end;
  end;
(Hab ich aus der Doku - oder aus dem, was ich dafür halte ^^)

Und unter Indy 9 sollte wie oben beschriben laufen: Du bekommst einen TIdPeerThread und dieser hat direkt die Merhode WriteBuffer.

Also so ähnlich:
Delphi-Quellcode:
TMyForm.ServerExecute(AThread: TIdPeerThread);
  begin
    AThread.Connection.WriteBuffer('Hallo Welt', length('Hallo Welt'), True);
  end;
Aber ich hatte schon ewig nix mehr damiit gemacht ...
  Mit Zitat antworten Zitat
Bit_Solo

Registriert seit: 7. Jul 2005
21 Beiträge
 
#7

Re: Frage zu Dateiransfer mit Indy

  Alt 24. Okt 2008, 20:42
Aha. Aber mit WriteBuffer wird dann nix mit Datei senden. Eher doch WriteFile oder WriteStream, oder?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: Frage zu Dateiransfer mit Indy

  Alt 24. Okt 2008, 20:48
Naja, du kannst dir im Grunde die Methode nehmen, die dir am besten gefällt - ich glaube intern verrwenden die alle am Ende WriteBuffer.

Aber mit WriteStream gehts bei Dateien natürlich besser weil man da direkt den FileSStream übergeben kann. Am besten vorher die Größe übermitteln damit du am andern Ende wieder weist, wieviel du lesen musst.
  Mit Zitat antworten Zitat
Bit_Solo

Registriert seit: 7. Jul 2005
21 Beiträge
 
#9

Re: Frage zu Dateiransfer mit Indy

  Alt 24. Okt 2008, 21:47
Danke. Hat geklappt. Kämpfe nur noch mit'm Progressbar bei Client.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz