AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy10 / etwas probleme mit selbstgebastelter unit
Thema durchsuchen
Ansicht
Themen-Optionen

Indy10 / etwas probleme mit selbstgebastelter unit

Ein Thema von alleinherrscher · begonnen am 24. Mai 2006 · letzter Beitrag vom 24. Mai 2006
Antwort Antwort
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

Indy10 / etwas probleme mit selbstgebastelter unit

  Alt 24. Mai 2006, 19:20
Hi@all!

Ich bin gerade dabei, eine eigentständige Unit zu schreiben, die mit Hilfe von Indy-TCP Server und Client Dateistreams verschicken kann. Ich stelle mir folgendes vor:
Ich will einfach nur hinschreiben meineUnit.versendeStream(derStream,IpAdresse)
Um den Rest soll ich die Unit kümmern, in ihr soll server und client erzeugt und verwaltet werden.

ich habe dafür folgenden Code erstellt:

Delphi-Quellcode:
unit MeineUnit;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent,IdStreamVCL, IdComponent, IdTCPServer,IdTCPConnection,
  IdTCPClient,IdContext;

  var
  TCPClient1: TIdTCPClient;
  TCPServer1: TIdTCPServer;
  procedure Start(port:integer);
  procedure Stop();
  procedure SendStream(Stream: TFilestream;Host:String);
  procedure ReceiveStream(Acontext:TidContext);

implementation

procedure Start(port:integer);
{
+Aktiviert TCPClient und TCPServer
+Sollte immer am Start des Programms aufgerufen werden.
+zuletzt editiert: 24.05.06
}

begin
TCPClient1:= TIdTCPClient.Create;
TCPClient1.Port:=Port;
with TCPClient1 do
begin
  ReadTimeout:=5000;
  ConnectTimeout:=5000;
end;

TCPServer1:= TIdTCPServer.Create;
@TCPServer1.OnExecute:=@ReceiveStream;
with TCPServer1 do
begin
  MaxConnections:=1;
  DefaultPort:=Port;
  Active:=True;

end;
end;
procedure Stop();
{Stopt Server und Client, gibt Speicher frei.
zuletzt editiert: 24.06.05}

begin
TCPClient1.Free;
TCPServer1.Active:=False;
TCPServer1.Free;
end;
procedure SendStream(Stream: TFilestream;Host:String);
{
+Versendet vom TCPClient an TCPServer einen Filestream
+Dieser wird als Parameter übergeben, und muss vorher erzeugt worden sein.
+zuletzt editiert: 24.05.06
}

var
  IndyStream: TidStreamVCL;
begin
TCPClient1.Host:=Host;

  try
    IndyStream := TidStreamVCL.Create(Stream);
    try
      { Senden }
      with TCPClient1 do
      begin
        Connect;
        try
          Socket.Write(IndyStream, 0, true);
        finally
          Disconnect;
        end;
      end;
    finally
      FreeAndNil(IndyStream);
    end;
  finally
    FreeAndNil(Stream);
  end;
end;
procedure ReceiveStream(Acontext:TidContext);
var
  FSTream: TFileStream;
  SizeOfIncomingStream: Integer;
  IDS: TidStreamVCL;
begin

  FStream := TFileStream.Create('C:\test.tmp', fmCreate);
 try
    IDS := TidStreamVCL.Create(FStream);
    try
      { Empfangen }
      with AContext.connection do
      begin
        try
          SizeOfIncomingStream := Socket.ReadInteger;
          Socket.ReadStream(IDS, SizeOfIncomingStream);
        finally
          Disconnect;
        end;
      end;

      { Damit der Inhalt von IDS in FStream übertragen wird }
      IDS.VCLStream.Position := 0;
    finally
      FreeAndNil(IDS);
    end;
  finally
    FreeAndNil(FStream);
  end;
end;


end.

Leider überträgt das ganze System noch keine Dateien. D.h. Die Datei kommt zwar an, ist aber leer, also wird der filestream nicht aufgefüllt.
Ich weiß, das ist jetzt ziemlich blöd, weil ich den fehler nicht genauer eingrenzen kann, aber ich hab mir schon stundenlang den kopf darüber zerbrochen...kann das was mit dem "@TCPServer1.OnExecute:=@ReceiveStream;" zu tun haben...was genau bewirkt das "@" eigentlich?

Sorry, dass ich hier mit so was aufwendingem einfach reinplatze

Wäre cool, wenn ihr ne lösungsidee habt

Vielen lieben dank,

euer alleinherrscher
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Indy10 / etwas probleme mit selbstgebastelter unit

  Alt 24. Mai 2006, 21:01
Okay, ich habe noch ein bisschen was rausgefunden:

Er springt im Server ab, und zwar sobald er anfängt, etwas mit AContext zu machen. Also angezeigt wird die Zeile "with AContext do..."

Kann es sein dass ich einfach nicht die speicheradressen so umlegen darf, dass das on... Ereignis auf meine prozedur gelenkt wird?

Kann ich das On..Ereignis denn irgendwie anders "umlenken" ohne private und public zu benutzten?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Indy10 / etwas probleme mit selbstgebastelter unit

  Alt 24. Mai 2006, 22:14
Bei Delphi-Treff suchenPointer
Bei Delphi-Treff suchenZeiger
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  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 07:33 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