Hi, ich hab da mal ein Problem mit
indy, mit der IDTcpclient komponente,
und zwar bekomme ich nen Fehler wenn ich readbuffer mache, hier der code, vom server und v0n client:
Server:
Code:
type
TMessageRecord = Record
Befehl : string;
inhalt : string;
Farbe : Tcolor;
x1, y1, x2, y2 : integer;
end;
TClients = class (TObject)
constructor Create;
private
ArrCount: Byte;
ClArray: Array[1..32] of TIdPeerThread;
function GetClient (id: integer): TIdPeerThread;
public
procedure Add (Thread: TIdPeerThread);
procedure Delete (id: integer);
procedure Broadcast (MessageRecord: TMessageRecord);
procedure messages(messages : string);
function IndexOf (Thread: TIdPeerThread): integer;
property Count: Byte read ArrCount;
property Clients[id: integer]: TIdPeerThread read GetClient; default;
end;
procedure TClients.Broadcast (MessageRecord: TMessageRecord);
var
i: Byte;
begin
for i := 1 to 32 do
begin
try
if ClArray[i] <> nil then ClArray[i].Connection.WriteBuffer(MessageRecord, SizeOf(MessageRecord), True);
except
end;
end;
end;
Die Classe da hab ich von der website hier, jetzt der Client:
Code:
TClientHandleThread = class(TThread)
private
procedure HandleInput;
public
protected
procedure Execute; override;
end;
procedure TClientHandleThread.Execute;
begin
while not Terminated do
begin
if not Form1.Clienttcp.Connected then
Terminate
else
try
Form1.Clienttcp.ReadBuffer(befehl, SizeOf (Befehl));
Synchronize(HandleInput);
except
end;
end;
end;
TClientHandleThread.Execute; wir ausgeführt nachdem er connected hat, und handleinput ist ne procedure die den Befehl verarbeitet, aber achdem er readbuffer gemacht hat schmiert das programm ab. Stings per writeln und readln kann ich empfangen und senden!
Aber das mit dem writebuffer und readbuffer klappt irgendwie nicht!
Eaccesviolation wird ausgelöst, ich hab keinen plan wie ich das deuten soll!