Entwickler-Ecke

Internet / Netzwerk - Indy - TCP Client verbindet nicht zu Server


flaschenkind - Di 01.08.06 18:45
Titel: Indy - TCP Client verbindet nicht zu Server
Ich will einen Chat Programmieren. Jetzt scheitert es aber schon beim Verbinden :(
Ich habe einen Clienten und Server. Der Server ist gestartet und läuft. Und ich habe einen Clienten. Der soll zum Server verbinden, das tut aber irgentwie nicht.

Meine Codes:
Server starten:

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:
if IdTCPServer1.Active = False then
begin
  Button1.Caption := 'Bitte warten';
  Button1.Enabled := False;
  SpinEdit1.Enabled := False;
  IdTCPServer1.DefaultPort := SpinEdit1.Value;
  IdTCPServer1.Active := True;
  Label2.Caption := 'Online';
  Label2.Font.Color := clGreen;
  Button1.Enabled := True;
  Button1.Caption := 'Server Stoppen';
end
else
begin
  Button1.Caption := 'Bitte warten';
  Button1.Enabled := False;
  IdTCPServer1.Active := False;
  Label2.Caption := 'Offline';
  Label2.Font.Color := clRed;
  SpinEdit1.Enabled := True;
  Button1.Enabled := True;
  Button1.Caption := 'Server Starten';     
end;


Client verbinden:

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:
if IdTCPClient1.Connected = False then
begin
  Button1.Caption := 'Bitte warten';
  Button1.Enabled := False;
  SpinEdit1.Enabled := False;
  IdTCPClient1.Connect(Edit1.Text, SpinEdit1.Value);
  if IdTCPClient1.Connected = True then
  begin
    Label2.Caption := 'Online';
    Label2.Font.Color := clGreen;
    Button1.Caption := 'Trennen';
  end
  else
  begin
    Button1.Caption := 'Verbinden';
    ShowMessage('Es ist ein Fehler beim Verbinden aufgetreten.');
  end;
  Button1.Enabled := True;

end
else
begin
  Button1.Caption := 'Bitte warten';
  Button1.Enabled := False;
  IdTCPClient1.Disconnect;
  Label2.Caption := 'Offline';
  Label2.Font.Color := clRed;
  SpinEdit1.Enabled := True;
  Button1.Enabled := True;
  Button1.Caption := 'Verbinden';     
end;


alias5000 - Di 01.08.06 19:46

Bist du dir sicher, dass er nicht verbindet? Verlager den Code nach idTCPClient.connect mal ins OnConnected Ereignis, da IMHO der Befehl connect in einem anderen Thread ausgeführt wird und somit schon bevor die Verbindung steht mit der Ausführung der nachfolgenden Befehle begonnen wird.

Gruß alias5000


flaschenkind - Di 01.08.06 20:09

Wie meinst du das, dem Code in OnConnected zu verlagern?


alias5000 - Di 01.08.06 20:13
Titel: Re: Indy - TCP Client verbindet nicht zu Server
user profile iconflaschenkind hat folgendes geschrieben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
if IdTCPClient1.Connected = False then
begin
  Button1.Caption := 'Bitte warten';
  Button1.Enabled := False;
  SpinEdit1.Enabled := False;
  IdTCPClient1.Connect(Edit1.Text, SpinEdit1.Value);
  if IdTCPClient1.Connected = True then
  begin
    Label2.Caption := 'Online';
    Label2.Font.Color := clGreen;
    Button1.Caption := 'Trennen';
  end
  else
  begin
    Button1.Caption := 'Verbinden';
    ShowMessage('Es ist ein Fehler beim Verbinden aufgetreten.');
  end;
  Button1.Enabled := True;


{...}


Der markierte markierte Teil aus dem Client- Code


flaschenkind - Di 01.08.06 20:17

"Der markierte markierte Teil aus dem Client- Code"

Wie meinste das?


alias5000 - Di 01.08.06 20:24

Wo liegt dein Problem? du sollst den Teil, den ich dir grade orange markiert habe (achtung: ab Zeile 7, die Forensoftware hat hier einen Bug) in das Ereignis TidTCPClient.OnConnected auslagern. Kommst du mit?


flaschenkind - Di 01.08.06 20:48

Ne, irgentwie nicht. Was meinste damit dahin auslagern?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
IdTCPClient1.Onconnected(if IdTCPClient1.Connected = True then
  begin
    Label2.Caption := 'Online';
    Label2.Font.Color := clGreen;
    Button1.Caption := 'Trennen';
  end
  else
  begin
    Button1.Caption := 'Verbinden';
    ShowMessage('Es ist ein Fehler beim Verbinden aufgetreten.');
  end;
  Button1.Enabled := True;);

Das geht ja nicht. Ich verstehe nicht, was du meinst :(


alias5000 - Di 01.08.06 20:52

Du weißt, was das Ereignis OnConnected bei idTCPClient1 ist und wie man da Code reinschreibt?


Narses - Di 01.08.06 20:54

Moin!

@user profile iconflaschenkind: Ähm, könnte es sein, dass du eher in die Kategorie "Netzwerkanfänger" gehörst? ;)

Falls ja, und du dich da eher mit Code-Schnipseln von anderen Leuten rumquälst, dann schau doch mal hier hin [http://www.delphi-library.de/topic_einen+LANInternetChat+mit+TServerTClientSocket+machen_60744.html], vielleicht kommst du damit für den Anfang besser klar. ;)

cu
Narses


flaschenkind - Di 01.08.06 23:43

user profile iconNarses hat folgendes geschrieben:
Moin!

@user profile iconflaschenkind: Ähm, könnte es sein, dass du eher in die Kategorie "Netzwerkanfänger" gehörst? ;)

Falls ja, und du dich da eher mit Code-Schnipseln von anderen Leuten rumquälst, dann schau doch mal hier hin [http://www.delphi-library.de/topic_einen+LANInternetChat+mit+TServerTClientSocket+machen_60744.html], vielleicht kommst du damit für den Anfang besser klar. ;)

cu
Narses
Es geht. Ich habe mit Indy schon nen HTTP Server gemacht und kann jetzt nen andern PC zum Teil fernsteuern ;)
Aber hier muss ich ja vom Clienten zum Server connecten, da ist es nur ne Internet Seite, die ich aufrufe.
Im Anhang ist mal der Komplette Code, falls den Einer will. Ich hoffe, mir kann dann jemand helfen ;)


alias5000 - Mi 02.08.06 16:08

Ich würd vorschlagen, dass du erstmal das machst, was ich oben geschrieben hab :roll:
Wenn du das gemacht hast und es dann immer noch nicht funtzt, dann schau ich mir evtl. mal die Source komplett an, aber erstmal will ich, dass du das machst.