![]() |
Auf Buffer warten
Hallo Leute,
ich habe versucht einkommende Buffer auf eine Indytcpserver mit einem integer wert zu versehen. Allerdings funktioniert das nur so lange nur ein Client connectet ist. Ich habe mal mit einzelanweisungen das ganze durchlaufen lassen und bin zu dem Ergebnis gekommen, das der richtige Buffer gelesen werden kann, allerdings kommt dieser Leer an(also bei string ''). Ich folgere daraus, dass man hier auf den Buffer gewartet werden muss, die Frage ist nur wie. Desweiteren habe ich probleme bei For-Schleifen, die scheinen einfach nicht richig zu zählen. Passiert mir aber nur in Unterprogrammen, welcher von OnExecute ausgeführt werden. (zb: Zählt er statt 1, 2 , 3 .. 5,7,3) ich habe mir gedacht, das es eventuell Probleme mit den Variablen gab so habe ich meine Zählvariable vorher auf 0 gesetzt, bekomm aber dann im Complier die Meldung, das dieser Wert nie genutzt wird. Hier ein paar Auszüge aus dem Quelltext: Auf dem Server
Delphi-Quellcode:
das Unterprogramm zum senden:
procedure TFormSockel.IdTCPServer1Execute(AThread: TIdPeerThread);
var anweisung: byte; begin anweisung:= AThread.Connection.ReadSmallInt; case anweisung of 2: IdentifikationsAnfragen(AThread);//identifikation 11: spielerleaved(Athread); //logout 1: Nachrichtkommtan(AThread); end; AThread.Connection.Disconnect; end;
Delphi-Quellcode:
Bei ServerKomponenten des Clients
procedure Spielerlogininformieren(vtyp:TSpielerjointChat);
var i: byte; begin for i:= 1 to 8 do begin if not(VASpieler[i].UserId = vtyp.userid) and (VASpieler[i].Statusverbunden = true) then begin with Welchersockel(i) do begin WriteSmallInt(0); WriteBuffer(vtyp,sizeof(tspielerjointchat)); end; end; end; end;
Delphi-Quellcode:
Und hier wo es oft hängen bleibt, also wo der Buffer mit leeren Werten gelesen wird:
procedure TFormVerbinden.IdTCPServer1Execute(AThread: TIdPeerThread);
var vantwort : byte; begin vantwort:= AThread.Connection.ReadSmallInt; case vantwort of 3 : Idantwort(AThread); 1 : Chatnachrictempfang(AThread); 0 : spielerjoinchat(AThread); 13: spielerleaved(AThread); end; end;
Delphi-Quellcode:
Hoffe jemand hat ne Idee
procedure spielerjoinchat (AThread: TIdPeerThread);
var vtyp: TSpielerjointChat; i: byte; begin AThread.Connection.ReadBuffer(vtyp,sizeof(Tspielerjointchat)); for i:=1 to 7 do begin if(vAanderespieler[i].Statusverbunden = false) then begin with vAanderespieler[i] do begin Nickname:= vtyp.Nickname; UserId:= vtyp.userid; Statusverbunden:= true; userlisterefresh; exit; end; end; end; end; mfg Lukas P.S: kann mir jemand sagen welcher Indyversion standartmäßig bei Delphi 6 pro dirn ist? Würde meine Suche manchmal erleichtern.Danke €: Oh sorry gerade gemerkt falsche Ecke bitte verschieben. Habe ich irgendwie verpennt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz