Mal folgende Frage... Ich habe mal bissl mit den socket Kompos rumprobiert (RESPEKT besser als Indy ) Also, von der Benutzung her ^^
Jetzt zu meiner Frage:
Ich möchte mehrere Clients drauf connecten lassen.
Jetzt habe ich einen Array von meiner Spieler Klasse.
In diesem, habe ich für jeden Client ne Nummer, kann ich jetzt sehen von welchem Client in nen Record geschickt bekommen habe?
Schön wärs
EDIT: PS: Wie hastes denn zB. bei napalmbomber gemacht? @SOS
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ich sende bei jedem Datenpaket die Spielerkennung mit, die dem Client beim Verbindungsaufbau zugewiesen wurde. Sieht in etwa so aus :
Verbindung :
- Client verbindet zum Server
- Server vergrößert Spielerarray und gibt das höchste Element des Arrays an den Spieler als ID
Im Spiel :
- Client sendet seine Spielerdaten inkl. ID
- Server schreibt Spielerdaten ins Array anhand der ID
das eröffnet tolle möglichkeiten zum cheaten einfach mal den gegenspieler bewegen... bei vielen socket klasen, kann man verbindungen auch in threads kapseln - die können dann einen spieler alleine handeln und du riskierst nicht, dass jemand anfängt, über gefälschte ids mithilfe von proxys oder routern zu ändern und plötzlich andere spieler zu bewegen.
Mh, eigentlich kann man niemanden bewegen, die eigene position und so, ist ja auf meinem Rechner.
Die kann also niemand bewegen oder?
Höchstens, das sie verfälscht angezeigt wird bei nem andere client...
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ne, in jedem Frame zu senden schadet den FpS nicht unbedingt, wird aber zu 100% dafür sorgen das du quasi die "Ports" des Server fluten tust und der dadurch me Menge Packete dropt. Also entweder im Timer, oder nur dann senden wenn sich was geändert hat.
Mh, da eigentlich die ganze Zeit Veränderungen sind,
gehe ich lieber auf einen Timer?
Ok, das dazu.
wenn ich ihn auf 20 stelle, weiß ich net ob das gut ist, da das manchmal entscheident sein kann, für alle Beteiligten.
Stell dir vor einer verliert obwohl er 10 hundertstel schneller war...
Ich leg mal los, aber über den Intervall diskutieren wir noch
Registriert: Sa Jan 04, 2003 21:23 Beiträge: 674 Wohnort: Köln
wenn du einen Timer benutzt und das Interval zu niedrig einstellst wird das alelrdings auch garantiert zu schwierigkeiten führen, wenn z.B. das Timerinterval so klein ist, dass die NAchrichten in dieser ZEit garnicht immer abgeschickt werden können...
außerdem gibt es dann das Problem, dass mehrere nacheinander abgeschickte PAkete auf einmal ankommen können (nur bei sendtext so ??)
du könntest vom Server immer erst eine Bestätigung schicken lassen und wenn diese eingetroffen ist die nächste Aktualisierung losschicken...
Das logfile hab ich mal in die ganze Anwendung eingebaut, um zu sehen was da so abgeht(hab ich von SOS gelernt ).
Mein Problem ist, das er in der Zeile
Code:
socket.ReceiveBuf(buff,socket.ReceiveLength);
Mich in das \"CPU\" Fenster kickt. Aber er arbeitet das
Code:
logfile.Add('Rocrod an gegnerinfo['+inttostr(buff.LANID)+'] übergeben');
Registriert: Sa Jan 04, 2003 21:23 Beiträge: 674 Wohnort: Köln
verschickst du auch ein REcord vom Typ TSpieler_Info ??
ansonsten würde ich dir raten das speichern des Logfiles direkt in die Add-Routine zu implementieren, dann musst du nicht soviel tippen...
oder aber du machst ne try finally konstruktion um deinen Code und im finally speicherst du dann den logfile...
oder ist logfile einfach ne stringlist??
ja, stringlist, ist ja nur zum test... Aber klar verschicke ich auch Tspieler_info, sonst würde das ja nicht gehen können ^^ bzw. dann ist klar das es net geht.
EDIT: kann es sein das es net geht weil ich den record aus ner klasse heraus nehme und wieder reinspeichere? nein oder?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Code:
socket.ReceiveBuf(buff,socket.ReceiveLength);
Böse Falle...wenn dann nämlich an deinem Socket mehr Daten anstehen als in dein Tspieler_info reinpassen knallts logischerweise. Also socket.ReceiveLength besser durch SizeOf(TSpieler_Info) ersetzen.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.