Ich habe eine Serveranwendung aufgebaut.
Sie sieht so aus:
beim Form.Create:
Delphi-Quellcode:
Clients := TThreadList.Create;
IdTCPServer.Active := True;
beim Form.IdTCPServer.Execute:
Delphi-Quellcode:
if (AThread <> nil) and (not AThread.Terminated) and (AThread.Connection.Connected) then
begin
Code := AThread.Connection.ReadInteger;
case Code of
GET_CLIENTID: AddClient(AThread);
... // Verschidene Anweisungen an den Server.
end;
end;
beim Form.AddClient:
Delphi-Quellcode:
var
Client: PClient;
ID : Cardinal;
errorcode: Integer;
begin
errorcode:=0;
try
with Clients.LockList do
begin
try
New(Client);
Client^.ID := LfdID;
Inc(LfdID);
Client^.Report := nil;
Add(Client);
finally
Clients.UnlockList;
end;
end;
finally
AThread.Connection.WriteInteger(errorcode);
end;
AThread.Connection.WriteInteger(Client^.ID);
end;
Beim Form.OnDestroy
Delphi-Quellcode:
IdTCPServer.Active := false;
with Clients.LockList do
try
for i := 0 to Count-1 do
begin
Dispose(Items[i]);
end;
Clients.Clear;
finally
Clients.UnlockList;
end;
Clients.Free;
Die Clientanwendung macht folgendes:
Delphi-Quellcode:
with IdTCPClient1 do
begin
Connect;
WriteInteger(GET_CLIENTID);
if ReadInteger <> 0 then exit;
ID := ReadInteger;
... //ein par befehle an den Server
Disconnect;
end;
Funktioniert wunderbar! ARBER! wenn ich den Server schliese bekomme ich volgende Fehlermeldung:
"Systemfehler code: 1400. Ungültiges Fensterhand"
Was ich schon alles Probiert habe:
Ich habe mal einen ThreadManager hinzugefügt.
Es sind aber bei beendigung des Servers, keinerlei Threads in der Liste.
in der IdServer.Treads auch nicht!
Hat jemand sonst noch eine Idee?
wäre cool wenn mir einer Helfen könte!
Thx!