Entwickler-Ecke
Internet / Netzwerk - IDTCPSERVER Threads erstellen
Jerk - Do 27.09.07 00:59
Titel: IDTCPSERVER Threads erstellen
Nachdem mein erster Thread zu diesem thema leider unbeantwortet bliebt habe ich noch eine weile gegooogelt und auch halb eine Lösung gefunden.
Ich möchte vom Server aus an alle clients die Connected sind eine Nachricht senden, dazu soll man ja Eine Liste mit den einzelnen Clients erstellen das hab ich so gelöst:
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:
| var Form1: TForm1;
fClientlist : TList;
type TClientClass = class fAthread : TIDPeerThread;
end; implementation
{$R *.dfm}
procedure TForm1.ServerConnect(AThread: TIdPeerThread); begin AThread.Data:= TClientClass.Create(); fClientList.Add(AThread.Data); TClientClass(AThread.Data).fAThread:= AThread; end;
procedure TForm1.ServerDisconnect(AThread: TIdPeerThread); begin fClientList.Delete(fClientList.IndexOf(AThread.Data)); end;
procedure TForm1.ServerExecute(AThread: TIdPeerThread); var i: integer; begin
for i:=0 to fCLientList.Count-1 do begin if TClientClass(fClientList[i]).fAThread.Connection.Connected then begin TClientClass(fClientList[i]).fAThread.Connection.WriteLn('Hallo'); end; end; end; |
Mein Problem an der Sache ist das der Client beim Connecten gleich die Meldung bekommt:"Connection closed gracefully"
Was mache ich hier falsch?
Narses - Do 27.09.07 01:39
Moin und :welcome: im Forum!
Bei den Indies ist doch ein Chat-Demo mit dabei. Hast du dir das schonmal angesehen? :les: :?: Das sollte eigentlich deinem aktuellen Problem sehr nahe kommen. :idea: ;)
cu
Narses
Jerk - Do 27.09.07 02:50
Hmm in dem Demo Ordner ist HTTP und Mail drinne, keine Demo die mir helfen kann denke ich :(
Ich würde aber auch lieber verstehen was an meinem Quellcode falsch ist.
Andererseits wo finde ich die Demo, ist Indy Version 9.
Noch eine Sache
beim client habe ich nen Timer der pro sekunde readln macht, dazu nen Antifreeze und halt kurzen Timeout.
Wenn ich nun das Programm beenden will dachte ich sollte wohl erst der timer stoppen und der Client disconnecten, jedoch hilft das nicht bei dem Problem das sich der Client nurnoch über den Taskmanager schliessen lässt -.-
Jerk - Do 27.09.07 13:56
Hmm das is ja noch ne Ecke komplizierter. Wird wohl ne Weile dauern das alles zu verstehen. Aber warum bei meiner Version immer connection closed gracefully kommt weis keiner oder?
Narses - Do 27.09.07 15:28
Moin!
Jerk hat folgendes geschrieben: |
| Aber warum bei meiner Version immer connection closed gracefully kommt weis keiner oder? |
Schonmal gesucht?
CONNECTION CLOSED GRACEFULLY :les: ;)
cu
Narses
Jerk - Do 27.09.07 22:39
Danke erstmal für die Antowrten...
Was die Meldung bedeuted weis ich warum sie kommt verstehe ich nach wie vor nicht, ist aber inzwischen egal.
--
Zu dem Demoprogramm, in dem Code des clients ist ja dieser Abschnitt zu findne:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TClientHandleThread.Execute; begin beep; while not Terminated do begin if not ClientFrmMain.Client.Connected then Terminate else try ClientFrmMain.Client.ReadBuffer(CB,sizeof(cb)); Synchronize(HandleInput); except end; end; end; |
Liege ich richtig in der annahme das diese Procedure durch einen connect und einen Buf der vom Server kommt ausgelöst wird?
Wenn das mit dem Buff stimmt wie muss der aussehen damit das funktioniert, weil wenn ich einen einfachen String als Buff sende passiert nichts
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!