Autor Beitrag
Aton
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 125

Windows XP
D7 Enterprise
BeitragVerfasst: Fr 16.04.04 14:10 
Liebes Forum,

ich weiß, dieses Thema gab es schon einhundert mal. Aber bei mir klappt es einfach nicht!

Erste Frage :?:
Ist es vom Prinzip das gleiche, Dateien übers LAN oder übers Internet zu schicken? Hintergrund ist, dass es bei mir lokal (localhost) klappt, aber nicht mit meiner externen IP übers Internet.

Zweite Frage :?:

Vielleicht sieht den Fehler jemand? Wenn ich beim Client die Internet-IP des Servers eingebe (z.B. von www.aida.uni-hannove...Adresse/Default.asp), kommt immer Verbindungs Time-Out! Die Firewall lässt den Server als Server zu und den Client (anderer Rechner) ins Internet.

Hier das Listing:

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:
unit TransServer;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls,
  IdThreadMgr, IdThreadMgrDefault;

type
  TServerForm = class(TForm)
    Server: TIdTCPServer;
    CBServerAktiv: TCheckBox;
    IdThreadMgrDefault1: TIdThreadMgrDefault;
    procedure CBServerAktivClick(Sender: TObject);
    procedure ServerExecute(AThread: TIdPeerThread);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  ServerForm: TServerForm;

implementation

{$R *.dfm}

procedure TServerForm.CBServerAktivClick(Sender: TObject);
begin
  Server.Active := CBServerAktiv.Checked;
end;

procedure TServerForm.ServerExecute(AThread: TIdPeerThread);
var
  FStream: TFileStream;
begin
  FStream := TFileStream.Create('C:\server.tmp', fmOpenRead);
  try
    AThread.Connection.OpenWriteBuffer;
    AThread.Connection.WriteStream(FStream);
    AThread.Connection.CloseWriteBuffer;
  finally
    AThread.Connection.Disconnect;
    FStream.Free;
  end;
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:
71:
72:
73:
unit TransClient;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, ExtCtrls;

type
  TClientForm = class(TForm)
    CBClientAktiv: TCheckBox;
    Client: TIdTCPClient;
    Button1: TButton;
    PButtons: TPanel;
    Label1: TLabel;
    EHost: TEdit;
    procedure CBClientAktivClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure EHostChange(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  ClientForm: TClientForm;

implementation

{$R *.dfm}

procedure TClientForm.CBClientAktivClick(Sender: TObject);
begin
  if CBClientAktiv.Checked then
  begin
    try
      Client.Connect(15000);  // in Indy < 8.1 leave the parameter away
    except
      on E: Exception do
        MessageDlg ('Fehler beim Verbinden:'#13+
                     E.Message, mtError, [mbOk], 0);
    end;
  end
  else
  begin
    Client.Disconnect;
  end;

  CBClientAktiv.Checked := Client.Connected;
  PButtons.Enabled := Client.Connected;
end;

procedure TClientForm.Button1Click(Sender: TObject);
var 
  FStream: TFileStream;
begin 
  FStream := TFileStream.Create('C:\client.tmp', fmCreate); 
  try
    Client.ReadStream(FStream, -1, True); // Stream empfangen
    FStream.Seek(0, soFromBeginning);
  finally
    FStream.Free; // Stream freigeben
  end;
end;

procedure TClientForm.EHostChange(Sender: TObject);
begin
  Client.Host := EHost.Text;
end;

end.


Wenn ich auf Button1 klicke, würde ich gern die Datei "server.tmp" empfangen....

Danke für die Mühen,
schönes Wochenende,
Jens.
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mi 09.06.04 22:12 
hi,
ich habe zwar keine Ahnung von Datei Streams, aber ich habe das mal getestet.

Ich habe mir aus deinen Quelltexten die Komponenten rausgesucht und versendet. Ich habe deine Quelltexte ebenfalls verwendet.

Beim Netzwerk gab es kein Problem.

Und als ich endlich einen freiwilligen an einem anderen PC gefunden habe, da wurde die Datei komplett und fehlerfrei übertragen...

Wichtig ist, dass die Client & Server auf dem gleichen Port laufen und dass du die Internet IP angibst (217.231.223.251).

Ebenfalls sollte der 2. Rechner nicht mit der gleichen IP wie der Server online sein (falls der Client dir Verbindung ins Internet über LAN herstellt.)

mehr kann ich dir zu diesem Zeitpunkt noch nicht berichten.

hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej