Hallo an alle!
Ich habe gestern erst mit Indy angefangen, bin also noch ganz neu.
Trotzdem hab ich ne Frage: Ich habe Indy 10.0.52 gestern installiert und mich an den Beispiel entlanggehangelt.
Ich möchte gerne eine kleine TCP-Verbindung aufbauen, über die nur Textnachrichten ausgetauscht werden sollen. Diese sollen dann in einer späteren Version noch interpretiert werden. Aber ich komme erst garnicht so weit, dass Nachrichten ausgetauscht werden können.
Der Server lässt sich ohne Probleme starten. Aber sobald der Client versucht zu connecten, stürtzt das Programm ab und ich habe eine Systemlast von 100%.
Am besten poste ich auch mal meinen Code... vielleicht hilft das ja!?
Server: die execute-Methode
Delphi-Quellcode:
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:
| procedure TForm1.IdTCPServerExecute(AContext: TIdContext); var command: String; connected: Boolean;
begin
AContext.Connection.IOHandler.WriteLn('Hello'); connected:= true; while connected do begin try command:= AContext.Connection.IOHandler.ReadLn; AContext.Connection.IOHandler.WriteLn('>>'+command); Label5.Caption:= command; if (ansiUpperCase(command) = 'BYE') or (ansiUpperCase(command) = 'QUIT') then begin AContext.Connection.Disconnect; connected:= false; end; except connected:= false; end; end;
SleepEx(1, True);
end; |
Die Methode soll also einfach nur die vom Client geschickte Nachricht im Label anzeigen und an den Client zurückschicken. Mehr (erstmal) nicht.
Der Client-Code sieht wie folgt aus:
Delphi-Quellcode:
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:
| procedure TForm1.verbinde; var text: String; begin
try IdTCPClient1.Connect('127.0.0.1', 6666); except on E : Exception do begin
ShowMessage('Fehler: ' + E.Message);
end;
end; try text:= IdTCPClient1.IOHandler.ReadLn; Label1.Caption:= text; Form1.Caption:= 'Client: verbunden mit ' + IdTCPClient1.Host; except end;
end; |
Wenn ich diese Methode aufrufe, steigt die Prozessorlast auf 100% und nichts geht mehr.
Beim debuggen bin ich bis zur folgenden Zeile gekommen:
Sie befindet sich in der Indy-Unit: IdWinSock2 Zeile 2937
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Delphi-Quellcode: function Stub_connect (const s: TSocket; const name: PSockAddr; const namelen: Integer): Integer; stdcall; begin FixupStub('connect', @connect); Result := connect(s, name, namelen); end; |
Hab ich da jetzt was falsch gemacht, oder ist das vielleicht nen Bug der Version, hab gesehen, dass es eine neuere gibt. Wenn ja, wie kann ich die alte Version denn deinstallieren? Oder hilft es, vielleicht doch die 9er Version zu nutzen? Falls ja, wie mache ich einen downgrade?
Wäre super, wenn mir jemand helfen könnte!
Vielen Dank im Voraus!
Andreas
Moderiert von
jasocul: Delphi-Tags hinzugefügt