Autor Beitrag
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 13.07.07 09:33 
Moin!

(Abgetrennt von hier)

user profile iconNeotracer64 hat folgendes geschrieben:
Wie könnte ich jetzt am einfachsten mit den Kompos Datenübertragungen zwischen Server <> Client realisieren?

[...]

Es macht schon Sinn, wenn man als Server eine Datei an mehrere Clients oder nur an einen schicken möchte.
Von Client zu Server macht es schon weniger Sinn, aber ich hatte da so eine Art CVS Idee im Kopf, wo jeder seine Projekt-Dateien auch an den Server schickt, der sie dann verwaltet und mit anderen synchronisiert. Sozusagen als Sammelstelle.

[...]

Vlt. hast du eine Idee für mich, wie ich also einen Server <> Client DateiTransfer mit deinen Komponenten am besten hinbekomme?

Die Idee ist die gleiche, wie im BinProtoTut-Chat, nur dass du im Server nicht den Code verwendest, um die FileStreamChunks weiterzuleiten, sondern dort zu speichern. Ich mache mal ein konkretes Beispiel dazu, dauert aber etwas (evtl. heute Abend). ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 14.07.07 00:26 
Moin!

Hier das versprochene Demo-Projekt für einen minimalen Filetransfer. Der Client verbindet sich sofort mit dem Server (Host auf "localhost" in der Komponente voreingestellt, ggfs. ändern) und kann dann auf Buttonklick und Dateiauswahlbox eine Datei an den Server senden (der Button bleibt solange deaktiviert, bis der Transfer fertig ist). Der Server speichert alle Dateien, die er von Clients erhält, im Verzeichnis der EXE ab, der Name wird aus der Anzahl der bisher gesendeten Dateien und ".txt" gebildet (ggfs. also umbenennen). Es findet keine Fehlererkennung oder sonstiges statt, das Beispiel ist wirklich sehr minimal gehalten. Im Anhang befindet sich das komplette Projekt zum selbst Ausprobieren.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
unit UClient;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, NarsesBFPA, UProtocol;

type
  TfrmClient = class(TForm)
    OpenDialog: TOpenDialog;
    BtnSend: TButton;
    NBFPAClient: TNBFPAClient;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnSendClick(Sender: TObject);
    procedure NBFPAClientRequestData(Sender: TObject; PA: TProtocolAdapter);
    procedure FormCreate(Sender: TObject);
  private
    FOutStream: TFileStream;
  public
    { Public-Deklarationen }
  end;

var
  frmClient: TfrmClient;

implementation

{$R *.dfm}

procedure TfrmClient.FormCreate(Sender: TObject);
begin
  FOutStream := NIL;
end;

procedure TfrmClient.FormShow(Sender: TObject);
begin
  NBFPAClient.SessionName := DateTimeToStr(Now);
  NBFPAClient.Connect;
end;

procedure TfrmClient.BtnSendClick(Sender: TObject);
begin
  if OpenDialog.Execute then begin
    BtnSend.Enabled := FALSE;
    FOutStream := TFileStream.Create(OpenDialog.FileName,
                                     fmOpenRead or fmShareDenyWrite);
    NBFPAClient.Send;
  end;
end;

procedure TfrmClient.NBFPAClientRequestData(Sender: TObject; PA: TProtocolAdapter);
  const
    CHUNK_SIZE = 2048;
  var
    Remaining: Integer;
    Cmd: TCmdSeq;
begin
  if Assigned(FOutStream) then begin
    Remaining := FOutStream.Size -FOutStream.Position;
    if (Remaining > CHUNK_SIZE) then
      Remaining := CHUNK_SIZE;
    Cmd := TCmdSeq.Create(CMD_CHUNK);
    Cmd.Add(FOutStream,Remaining);
    NBFPAClient.SendAndFree(Cmd);
    if (FOutStream.Position = FOutStream.Size) then begin
      FreeAndNil(FOutStream);
      Cmd := TCmdSeq.Create(CMD_STOP);
      NBFPAClient.SendAndFree(Cmd);
      BtnSend.Enabled := TRUE;
    end;
  end;
end;

procedure TfrmClient.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FreeAndNil(FOutStream);
  NBFPAClient.Disconnect;
end;

end.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
unit UServer;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, NarsesBFPA, UProtocol;

type
  TfrmServer = class(TForm)
    NBFPAServer: TNBFPAServer;
    ListBox: TListBox;
    procedure NBFPAServerConnectionsChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure NBFPAServerClientExecute(Sender: TObject;
      PA: TProtocolAdapter);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmServer: TfrmServer;

implementation

{$R *.dfm}

procedure TfrmServer.NBFPAServerConnectionsChange(Sender: TObject);
begin
  ListBox.Items.Assign(NBFPAServer.Connections);
end;

procedure TfrmServer.FormShow(Sender: TObject);
begin
  NBFPAServer.Open;
end;

procedure TfrmServer.NBFPAServerClientExecute(Sender: TObject; PA: TProtocolAdapter);
begin
  case PA.CurrentToken of
    CMD_CHUNK: // Dateistück eingetroffen
      begin
        if (PA.RefObject = NILthen begin // Datei schon angelegt?
          PA.RefObject := TFileStream.Create(
                            ExtractFilePath(Application.ExeName)+
                              IntToStr(frmServer.Tag)+'.txt',
                            fmCreate);
          PA.OwnsRefObject := TRUE; // beim Freigeben des PAs den FileStream auch
          frmServer.Tag := frmServer.Tag +1// Dateizähler erhöhen
        end;
        TFileStream(PA.RefObject).Write(PA.Inbound.Data[1]^, // Daten
                                        PA.Inbound.FrameSize[1]); // Menge
      end;
    CMD_STOP: // Dateitransfer beendet
      begin
        TFileStream(PA.RefObject).Free;
        PA.RefObject := NIL// Referenz entfernen
      end;
  end;
end;

procedure TfrmServer.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  NBFPAServer.Close;
end;

end.

cu
Narses
Einloggen, um Attachments anzusehen!
_________________
There are 10 types of people - those who understand binary and those who don´t.


Zuletzt bearbeitet von Narses am Mo 16.07.07 01:37, insgesamt 1-mal bearbeitet
Neotracer64
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 14.07.07 12:03 
Danke für deine Mühen Narses. :D
Wenn ich noch Fragen habe, melde ich mich wieder hier. ;)
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 16.07.07 01:38 
Moin!

Neue Version der Kompo (v1.10) und der Doku (v1.06), Details und Download - wie immer - im ersten Beitrag. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
MrOuzo
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 21.08.07 14:51 
Hallo Narses,

bei mir kommt bei der Installation unter Delphi5 Ent. UpdPack.1 folgende Fehlermldung:

[Fehler] NarsesBFPA.pas(430): Eine statische Methode kann nicht überschrieben werden

dabei handelt es sich um diese QuellCodeZeile

procedure InsertObject(Index: Integer; const S: string; AObject: TObject); override;

Gruß
MrOuzo
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 21.08.07 15:28 
Moin!

user profile iconMrOuzo hat folgendes geschrieben:
bei mir kommt bei der Installation unter Delphi5 Ent. UpdPack.1 folgende Fehlermldung:
Delphi-Compiler hat folgendes geschrieben:
[Fehler] NarsesBFPA.pas(430): Eine statische Methode kann nicht überschrieben werden

dabei handelt es sich um diese QuellCodeZeile

ausblenden Delphi-Quelltext
1:
procedure InsertObject(Index: Integer; const S: string; AObject: TObject); override;					

Ich schau´s mir mal an; ich melde mich wieder (kann etwas dauern, da ich kein D5 habe; was spricht gegen D7? :?)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
MrOuzo
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 21.08.07 16:09 
Hi Narses,

ich hab halt leider nur D5


Gruß
MrOuzo
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 21.08.07 21:30 
Moin!

user profile iconMrOuzo hat folgendes geschrieben:
ich hab halt leider nur D5

Nunja, ich empfehle mal pauschal D7, besser ist das. :zustimm:

Mit Hilfe von user profile iconBenBE, der freundlicherweise für mich unter D5 "gesucht" hat, gibt es eine neue Version mit den notwendigen Anpassungen für D5 :arrow: wie immer im ersten Beitrag. :les: Sollte jetzt laufen. :)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 21.08.07 21:33 
@Narses: Ob der Bug allerdings unter D4 oder D6 auch auftritt, hab ich nicht untersucht ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 21.08.07 21:38 
Moin!

user profile iconBenBE hat folgendes geschrieben:
Ob der Bug allerdings unter D4

Unterhalb von D5 supporte ich die Kompo nicht; und D5 auch nur, weil du mir dabei hilfst, sonst wäre das auch Essig. :nixweiss:

user profile iconBenBE hat folgendes geschrieben:
oder D6 auch auftritt, hab ich nicht untersucht ;-)

Ich teste die Tage mal D6, unter D7pro hab ich´s grad selbst getestet. :D

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
MrOuzo
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 22.08.07 14:45 
Hallo Narses, BenBE,


Superservice, danke, jetzt gehts zu installieren. Werde es dann gleich mal testen. :D

D7 werde ich auch einsetzen, habe aber noch soooo viele Kompos von D5 die ich nicht umheben möchte.


Gruß
MrOuzo
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Do 26.06.08 17:47 
Hallo, Ich weiss, dass der Threat uralt ist, aber ich habe keine Ahnung, wie ich die Komponenten installieren soll. Ich benutze Delphi 2006, und da gibt es die in dem PDF beschriebenen Menüpunkte nicht. Kann mir villeicht jemand sagen, wie es geht??
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 26.06.08 18:12 
Moin!

user profile iconBoldar hat folgendes geschrieben:
aber ich habe keine Ahnung, wie ich die Komponenten installieren soll. Ich benutze Delphi 2006,
Was spricht gegen D7? Ich sehe zu D2006 keine Vorteile... :nixweiss:

user profile iconBoldar hat folgendes geschrieben:
und da gibt es die in dem PDF beschriebenen Menüpunkte nicht. Kann mir villeicht jemand sagen, wie es geht??
Du könntest probieren ein neues Package zu erstellen und die Komponenten dann da rein zu installieren. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
DelphiMarkus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 303

OpenSuSE
Delphi 2009 Pro., Lazarus
BeitragVerfasst: Fr 27.06.08 08:32 
Hallo!
Ich wollte das hier auch mal probieren, aber leider meldet sich bei mir AntiVir. Er meint, bei der "Server.exe" etwas gefunden zu haben.
Ist das schon bekannnt, ich habe auf die schnelle nichts darüber in diesem Thema gefunden.

Ich glaube nicht das da wirklich was dran ist.
Ich kann das Programm auch nicht starten, AntiVir verweigert das. :cry:
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 27.06.08 11:08 
Moin!

user profile iconDelphiMarkus hat folgendes geschrieben:
Ich wollte das hier auch mal probieren, aber leider meldet sich bei mir AntiVir. Er meint, bei der "Server.exe" etwas gefunden zu haben.
Ist das schon bekannnt, ich habe auf die schnelle nichts darüber in diesem Thema gefunden.
Was für eine Server.exe? :gruebel: Mein Code und meine EXEn sind idR geprüft, wenn ich was rausgebe. Allerdings schlägt häufig die Heuristik zu, wenn man Server-Sockets in UPX-gepackten EXEn öffnet, vielleicht ist es das schon. :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
DelphiMarkus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 303

OpenSuSE
Delphi 2009 Pro., Lazarus
BeitragVerfasst: Mo 30.06.08 08:37 
Die EXE liegt unter diesem Pfad:
"TNBFPA_v111\Code\Server.exe"
AntiVir meint einen Virus oder ein anderes unerwünschtes Programm gefunden zu haben.
Hier ist der Text aus AntiVir dazu:
Zitat:

In der Datei '...\TNBFPA_v111\Code\Server.exe'
wurde ein Virus oder unerwünschtes Programm 'TR/ATRAPS.Gen' [trojan] gefunden.
Ausgeführte Aktion: Zugriff verweigern


user profile iconNarses hat folgendes geschrieben:
Mein Code und meine EXEn sind idR geprüft, wenn ich was rausgebe. Allerdings schlägt häufig die Heuristik zu, wenn man Server-Sockets in UPX-gepackten EXEn öffnet, vielleicht ist es das schon. :nixweiss:

Ich weiß es leider auch nicht...
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 30.06.08 09:22 
Moin!

user profile iconDelphiMarkus hat folgendes geschrieben:
AntiVir meint einen Virus oder ein anderes unerwünschtes Programm gefunden zu haben.
Das ist eine False-Positive-Meldung; das ist definitiv kein Tojaner. ;) (schätze, Serversocket+UPX schlagen da zu)

Lösch das Ding einfach nach dem Auspacken und übersetz´ dir das Demoprojekt selbst nochmal neu, dann hast du das Ganze "clean". :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
DelphiMarkus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 303

OpenSuSE
Delphi 2009 Pro., Lazarus
BeitragVerfasst: Mo 30.06.08 09:48 
Danke für den Tipp, jetzt klappt es! :zustimm:

Vielen Dank,
Maxi
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Mo 30.06.08 10:11 
Hey Narses,

Danke für diese schöne Komponente! Habe bisher noch keine Bugs gefunden, außer dass meine Anti-Viren Software die Server.exe nicht mag ;-)


Finde jedoch, dass die Angabe "Verschlüsselung" ein Witz ist und man für spätere Versionen - solltest du das geplant haben - eine stärkere Verschlüsselung verwenden sollte. Außerdem wäre eine asymmetrischer Schlüsselaustauch bzw. Hybride-Verschlüsselung sinnvoll!

Zusätzlich wäre eine Daten-Kompression noch sinnvoll!
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 30.06.08 10:19 
Moin!

user profile iconSirke hat folgendes geschrieben:
Danke für diese schöne Komponente! Habe bisher noch keine Bugs gefunden,
Danke. ;)

user profile iconSirke hat folgendes geschrieben:
Finde jedoch, dass die Angabe "Verschlüsselung" ein Witz ist [...] eine stärkere Verschlüsselung verwenden sollte
Die Komponenten verschlüsseln doch gar nix... :gruebel: sondern stellen dir Ereignisse bereit, um diese Verschlüsselung selbst in der gewünschten "stärke" auszuführen! :idea: Es liegt also allein an dir, wie "witzhaft" diese Verschlüsselung ausfällt. :nixweiss:

user profile iconSirke hat folgendes geschrieben:
Außerdem wäre eine asymmetrischer Schlüsselaustauch bzw. Hybride-Verschlüsselung sinnvoll!
Siehe oben, das ist nicht Aufgabe der Komponenten. ;)

user profile iconSirke hat folgendes geschrieben:
Zusätzlich wäre eine Daten-Kompression noch sinnvoll!
Klar wäre das sinnvoll; ist doch open-source, wir warten auf deinen Vorschlag. :)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.