Autor |
Beitrag |
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 13.07.07 09:33
Moin!
(Abgetrennt von hier)
Neotracer64 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
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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.
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 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. |
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 public 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: begin if (PA.RefObject = NIL) then begin PA.RefObject := TFileStream.Create( ExtractFilePath(Application.ExeName)+ IntToStr(frmServer.Tag)+'.txt', fmCreate); PA.OwnsRefObject := TRUE; frmServer.Tag := frmServer.Tag +1; end; TFileStream(PA.RefObject).Write(PA.Inbound.Data[1]^, PA.Inbound.FrameSize[1]); end; CMD_STOP: begin TFileStream(PA.RefObject).Free; PA.RefObject := NIL; 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
|
Verfasst: Sa 14.07.07 12:03
Danke für deine Mühen Narses.
Wenn ich noch Fragen habe, melde ich mich wieder hier.
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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
|
Verfasst: 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
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 21.08.07 15:28
Moin!
MrOuzo 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
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
|
Verfasst: Di 21.08.07 16:09
Hi Narses,
ich hab halt leider nur D5
Gruß
MrOuzo
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 21.08.07 21:30
Moin!
MrOuzo hat folgendes geschrieben: | ich hab halt leider nur D5 |
Nunja, ich empfehle mal pauschal D7, besser ist das.
Mit Hilfe von BenBE, der freundlicherweise für mich unter D5 "gesucht" hat, gibt es eine neue Version mit den notwendigen Anpassungen für D5 wie immer im ersten Beitrag. Sollte jetzt laufen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 21.08.07 21:38
Moin!
BenBE 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.
BenBE 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.
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
|
Verfasst: Mi 22.08.07 14:45
Hallo Narses, BenBE,
Superservice, danke, jetzt gehts zu installieren. Werde es dann gleich mal testen.
D7 werde ich auch einsetzen, habe aber noch soooo viele Kompos von D5 die ich nicht umheben möchte.
Gruß
MrOuzo
|
|
Boldar
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: 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
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 26.06.08 18:12
Moin!
Boldar 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...
Boldar 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.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
DelphiMarkus
Beiträge: 303
OpenSuSE
Delphi 2009 Pro., Lazarus
|
Verfasst: 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.
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 27.06.08 11:08
Moin!
DelphiMarkus 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? 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.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
DelphiMarkus
Beiträge: 303
OpenSuSE
Delphi 2009 Pro., Lazarus
|
Verfasst: 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 |
Narses 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. |
Ich weiß es leider auch nicht...
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 30.06.08 09:22
Moin!
DelphiMarkus 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".
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
DelphiMarkus
Beiträge: 303
OpenSuSE
Delphi 2009 Pro., Lazarus
|
Verfasst: Mo 30.06.08 09:48
Danke für den Tipp, jetzt klappt es!
Vielen Dank,
Maxi
|
|
Sirke
Beiträge: 208
Erhaltene Danke: 2
|
Verfasst: 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
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 30.06.08 10:19
Moin!
Sirke hat folgendes geschrieben: | Danke für diese schöne Komponente! Habe bisher noch keine Bugs gefunden, |
Danke.
Sirke 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... sondern stellen dir Ereignisse bereit, um diese Verschlüsselung selbst in der gewünschten "stärke" auszuführen! Es liegt also allein an dir, wie "witzhaft" diese Verschlüsselung ausfällt.
Sirke hat folgendes geschrieben: | Außerdem wäre eine asymmetrischer Schlüsselaustauch bzw. Hybride-Verschlüsselung sinnvoll! |
Siehe oben, das ist nicht Aufgabe der Komponenten.
Sirke 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.
|
|