Entwickler-Ecke

Internet / Netzwerk - Datenaustausch über Netzwerk


NemesisoD - Di 05.08.03 14:33
Titel: Datenaustausch über Netzwerk
Hi,

ich will ein Netzwerkprogramm schreiben, mit dem man Daten über netzwerk Downloaden kann. Texte verschicken funktioniert einwandfrei, aber wie kann ich ganze Daten von mehreren MB größe mit hilfe von TCPIP übertragen?


Hansi@OMG - Di 05.08.03 16:37

Ich versuche das seit fast 4 Monaten, dass ist entweder unmöglich oder extrem schwierig, ich hab es zwar soweit gebracht, dass man 6 MB verschicken kann, aber mehr geht net.


NemesisoD - Di 05.08.03 18:19

Würde es rein Theoretisch funktionieren wenn man Byte für Byte auslesen würde und dann senden?
Und anschließend auf den anderen Rechner wieder Byte für Byte zusammen setzen?


elysm - Mi 06.08.03 10:47

NemesisoD, eine frage: mit welchen kompo´s arbeitest du?

TServerSocket? oder mit der Indy-Koponente? oder mit den TCPClient/Server dingern? :?:

ich hab Delphi7 und wollte auch sowas ähnliches machen, ich hab aber nur tut´s (o.ä.) für die TServerSocket gefunden!


NemesisoD - Mi 06.08.03 12:41

Also ich benutze die TCPServer/Client, habe damit am besten erfahrung gemacht!


focus - Do 04.09.03 09:18

damit hats bei mir einigermassen funktioniert getestet hab ich zumindest schon 35 mb dateien..


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:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
unit Unit2;
//==========================================================================
   interface
//==========================================================================
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    ClientSocket1: TClientSocket;
    Button1: TButton;
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
  private
    FStream: TFileStream;
  public
  end;

var
  Form1: TForm1;
//==========================================================================
   implementation {$R *.dfm}
//==========================================================================
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket); 
var 
  iLen: Integer; 
  Bfr: Pointer; 
begin 
  iLen := Socket.ReceiveLength; 
  GetMem(Bfr, iLen); 
  try 
    Socket.ReceiveBuf(Bfr^, iLen); 
    FStream.Write(Bfr^, iLen);
  finally
    FreeMem(Bfr); 
  end
end
//--------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject); 
begin
  FStream := nil
end
//--------------------------------------------------------------------------
procedure TForm1.FormDestroy(Sender: TObject); 
begin 
  if Assigned(FStream) then 
  begin 
    FStream.Free; 
    FStream := nil
  end
end;
//--------------------------------------------------------------------------
procedure TForm1.ClientSocket1Disconnect(Sender: TObject; 
  Socket: TCustomWinSocket); 
begin 
  if Assigned(FStream) then 
  begin 
    FStream.Free; 
    FStream := nil
  end
end;
//--------------------------------------------------------------------------
procedure TForm1.ClientSocket1Connect(Sender: TObject; 
  Socket: TCustomWinSocket);
begin 
  FStream := TFileStream.Create('c:\atest.txt', fmCreate or fmShareDenyWrite);
end;
//--------------------------------------------------------------------------
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; 
  Socket: TCustomWinSocket);
begin
  Socket.SendStream(TFileStream.Create('c:\btest.txt', fmOpenRead or fmShareDenyWrite));
end;
//--------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin 
  ServerSocket1.Active := True;
  ClientSocket1.Active := True;
end;

end.


[http://www.swissdelphicenter.ch/de/showcode.php?id=1072]

gruss
michael


blackbirdXXX - Do 04.09.03 10:03

Was heißst einigermaßen? Das die Datei halb ankommt. Hie und da fehlt ein bit? :D
Das erinnert mich an diesen Screenshot wo 'Datei anlöschen steht' 8)


focus - Fr 05.09.03 13:13

;)
einigermassen heisst das ich das den code nur flüchtig getestet habe und bei der übertragung einer textdatei > 1mb immer in der zweiten zeile eine leerzeile eingefügt wurde.. keine ahnung woran das liegt
gruss
michael


G-man - Di 09.09.03 16:07

Ein Tutoriallink der den Datenaustausch beschreibr 8) : http://www.tutorials.delphi-source.de/indy/file004.shtml.