Autor Beitrag
Xenomorph150
Hält's aus hier
Beiträge: 9

Win 2000
Delphi 7, VB 6.0
BeitragVerfasst: Mo 13.02.06 09:25 
Hallo Leute,
für ein Schulprojekt soll ich einen Datenaustausch (Chat) zwischen zwei PCs realisieren.
Rahmenbedingungen dafür sind Delphi 7 und die Indy Komponeten (Version egal).
Da ich für die Version 10 bzw. 10.1.5 kein Tutorial fand, bzw. es mit einem für die Version 8 nicht kompatibel war, nahm ich nun die Version 9.0.19. Ich schrieb mal die Software nach Gut-dünken und dem Tutorial.
Leider wirft er mit jetzt immer eine #10061 Exception "Connection Refused". (beim Server)
Könnte vielleicht einer mir einen Tipp geben, wo der Fehler liegt bzw. hat jemand ein einfaches und gut verständliches Tutorial?


Client

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

interface

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

type
  TForm1 = class(TForm)
    TCPClient: TIdTCPClient;
    Button1: TButton;
    Chatlog: TListBox;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

with TCPClient do begin
//Host:= Edit1.Text;
//Port:= 666;
Connect;
try
Chatlog.Items.Add(TCPClient.ReadLn);
finally
Disconnect;
end;
end;
end;

end.


Server:
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:
unit Unit1; 

interface 

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

type
  TForm1 = class(TForm)
    TCPServer1: TIdTCPServer;
    procedure FormCreate(Sender: TObject);
    //procedure TCPServer1Connect(AThread: TIdPeerThread);
   procedure TCPServer1Execute(AThread: TIdPeerThread);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen } 
  end;

var 
  Form1: TForm1;

implementation

{$R *.dfm}

//procedure TForm1.TCPServer1Connect(AThread: TIdPeerThread);
//begin
//AThread.Connection.WriteLn('Welcome to the Indy TCP basic client/server demo');
//end;

procedure TForm1.TCPServer1Execute(AThread: TIdPeerThread);
begin
//AThread.Connection.Server.DefaultPort:=666;
with AThread.Connection do

  begin
  WriteLn('Hello from Basic Indy Server server.');
  Disconnect;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
TCPServer1.Active := True;
end;

end.
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mo 13.02.06 09:43 
Also die den Serverport hast du im Objektinspektor eingestellt?
Ich glaube der Client.Port war der Port der für die ausgehende Kommunikation geöffnet wird und ist nicht der ZielPort des Hosts.

Überprüfe mal am besten erstmal mit netstat -aoder www.sysinternals.com...ilities/TcpView.html ob der Server Port überhaupt geöffnet wird. Wenn dem so ist probier mal mit telnet localhost 666 ein paar Zeilen zu schreiben.
Xenomorph150 Threadstarter
Hält's aus hier
Beiträge: 9

Win 2000
Delphi 7, VB 6.0
BeitragVerfasst: Mo 13.02.06 09:50 
Danke für den Tipp,
also der Server antwortet schon mal (mit Telnet).
Habe einen Fehler gemacht beim schreiben, der Fehler tritt im CLIENT auf,
nicht im Server wie geschrieben!

Irgendeine Idee?
Ich habe den BoundPort schon auf 666 gelegt.

MFg
Nico
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mo 13.02.06 16:28 
Firewall z.B. die von XP?

Ich wüßte jetzt nicht wie man da weiter "rein schauen" kann, außer die Verbindungsparameter zu überprüfen(Ziel IP/Port) :?
Xenomorph150 Threadstarter
Hält's aus hier
Beiträge: 9

Win 2000
Delphi 7, VB 6.0
BeitragVerfasst: Mo 13.02.06 16:49 
Hab den Bound Port beim Client jetzt gelöst und nur den normalen Port eingetragen. Alle anderen Einstellungen im Objektinspektor nochmal überprüft. Jetzt klappts.

Vielen Dank!

Nico
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 13.02.06 17:16 
Moin und :welcome: im Forum!

user profile iconXenomorph150 hat folgendes geschrieben:
Ich habe den BoundPort schon auf 666 gelegt.

Ich möchte nicht versäumen darauf hinzuweisen, dass Portnummern bis einschließlich 1024 für well-known-services reserviert sind; Anwendungen sollten Portnummern oberhalb 1024 verwenden! :mahn: :wink:

cu
Narses
Xenomorph150 Threadstarter
Hält's aus hier
Beiträge: 9

Win 2000
Delphi 7, VB 6.0
BeitragVerfasst: Mo 13.02.06 17:27 
Hi,
und vielen Dank für die freundliche Begrüssung!
Ja da war noch *irgendwas*, aber da ich grade einfallslos war,
habe ich den guten alten Quake Standardport genommen, da ich mir sicher war,
dass den im moment keine Anwendung in der Schule benutzt.
(Die spielen eh alle nur Blobby Volley ~.~''')
Am Ende wird das natürlich noch geändert,
im moment gings nur darum es überhaupt zum laufen zu bringen,
wobei dies wirklich eine schwere Geburt war (irgendwie machts einem Indy nicht so leicht wie ichs gern hätte ^^').
Dennoch vielen Dank,
ich werde deinen Rat beherzigen!

Nico