Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi 4-gewinnt fertig, jetzt online machen (https://www.delphipraxis.net/113914-4-gewinnt-fertig-jetzt-online-machen.html)

k4ni 16. Mai 2008 16:03


4-gewinnt fertig, jetzt online machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Da ich zurzeit wegen einer fußoperation flachlege und mir total langweilig ist, habe ich angefangen 4gewinnt spiel in delphi zu schreiben.(ist +source im anhang).

Jetzt will ich das via Server/Client-Socket online stellen.
Also mit ganz normalen login den ich mit MySQL regeln werde.

Nun sagen wir mal es sind 10 leute in der 'lobby', einer will mit einem anderen ein spiel starten und ein anderer wieder mit einem anderen.
Wie sollte ich das angehen damit nicht alles durcheinander kommt?
Ich würde ja sagen der server ist nur so ein kleines ding zwischen drin das halt die packets von einem client an den anderen sendet, aber das ist mir zu unsicher (wegen hackern).
Wie sollt ich die ganze sache angehen?

danke :)

SirThornberry 16. Mai 2008 16:09

Re: 4-gewinnt fertig, jetzt online machen
 
willst du auf den Server mit der Datenbank ein richtiges Programm laufen lassen oder soll das ganze nur per php und mysql funktionieren?
Mit einem Server hätte es den Vorteil das die Clients alle eine Verbindung zum Server aufbauen und dieser an die anderen Clients die verbunden sind die Daten durchreichen kann. Wenn du es nur über eine MySql-Datenbank machen willst müssen die Leute entweder die ganze zeit pollen oder einer von den Client muss einen Server aufmachen damit der andere Client verbinden kann. Das hätte dann wieder den Nachteil das der Port beim Client offen sein muss.

k4ni 16. Mai 2008 16:13

Re: 4-gewinnt fertig, jetzt online machen
 
Einen Haupt-Server so zu sagen auf den alle clients raufgehen.

k4ni 16. Mai 2008 23:56

Re: 4-gewinnt fertig, jetzt online machen
 
Okay!
Ich bin soweit.
Ich hab jetzt mit dem client und den server angefangen. Nur jetzt bin ich schon an einem problem angelangt: (Hab mich für TServerSocket/TClientSocket entschieden)
Sobald der client etwas an den server sendet muss der server ja wissen obs jetzt vom hans oder peter kommt.
Also muss ich im OnConnect die IP irgendwie abspeichern und wenn der client ein packet sendet kann ich ihn dann identifiezieren.

Ich hab da an sowieso wie ne bestimme variable gedacht (weis nicht mehr wie man das nennt).
Sagen wir mal TPlayer.
also Player: TPlayer;

Player.ip : String;
Player.id : Integer;
Player.name : String;
..usw...

Und wenn ein Client connected wird so eine variable erstellt und gleich die IP zugeordnet (und id).
Und wenn ein Client ein packet sendet muss es erst deine identifications-procedure machen (via ip).
Also ich glaube ihr wisst was ich meint.

Wie könnte ich sowas machen?

AlexII 16. Mai 2008 23:57

Re: 4-gewinnt fertig, jetzt online machen
 
Bitte mit Screenshot!

MSSSSM 17. Mai 2008 08:16

Re: 4-gewinnt fertig, jetzt online machen
 
also
Du solltest es eher nicht mit Ip's machen, kann zu Problemen führen, vllt.
Wenn eben 1 client connected (mit indy gehts einfach) erstellst du in dem array einen neuen eintrag, mit fortlaufender id. (wie das geht? neue variable mit höchster id drin)
also:

Delphi-Quellcode:
type TPlayer = record
  id: integer;
  name: string;
  wins: integer;
  loses: integer;
  playing: boolean;
end;

var
  Players: array of TPlayer;
  iplayers: integer = 0;
Delphi-Quellcode:
{ wenn connected }
SetLength(Players, iplayers+1);
Players[iplayers].id:=iplayers;
Players[iplayers].name:='Spieler '+inttostr(iplayers+1);
Players[iplayers].wins:=0;
Players[iplayers].loses:=0;
Players[iplayers].playing:=false;
inc(iplayers);
dann sollte der client aber auch beim connecten seine id mittgeteilt bekommen, und die dann mitschicken;

k4ni 17. Mai 2008 11:48

Re: 4-gewinnt fertig, jetzt online machen
 
Okay!
Genau so hab ich mir das gedacht! :)
Danke!
Das mit der ID vom client wegschicken lass ich lieber (wegen hackern -> Packet Editor).
Wenn ein player connected soll er noch nicht als TPlayer zugeordnet werden. Aber danach sendet er gleich ein packet mit den login daten (name/passwort), und mit diesen daten kann ich dann per MySQL-Query die ID bekommen.

Ich werde da jetzt ein bisschen rumbasteln.
Danke nochmal.

k4ni 17. Mai 2008 14:34

Re: 4-gewinnt fertig, jetzt online machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also, ich bin jetzt mit dem login fertig und hab auch noch einen kleinen chat hinzugefügt.
Doch wenn man ein chat-packet sendet dann sendet man seine player-id mit (die der server dem client beim login sendet).
Aber ich finde das zu unsicher, weil hacker können diese ID einfach verändern und das packet nochmal absenden (mit einem PacketEditor).
Wie sollte ich die identification machen? -> Source im anhang.

Edit:
SQL daten:
Code:
/*
MySQL Data Transfer
Source Host: localhost
Source Database: 4gewinnt
Target Host: localhost
Target Database: 4gewinnt
Date: 17.05.2008 15:42:20
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `ID` int(20) NOT NULL default '0',
  `username` varchar(50) default NULL,
  `password` varchar(50) default NULL,
  `wins` int(20) default '0',
  `loses` int(20) default '0',
  `all_games` int(20) default '0',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'k4ni', 'test', '0', '0', '0');

MSSSSM 17. Mai 2008 14:41

Re: 4-gewinnt fertig, jetzt online machen
 
eine sid erstellen, eine session!

mfg

k4ni 17. Mai 2008 15:24

Re: 4-gewinnt fertig, jetzt online machen
 
Zitat:

Zitat von MSSSSM
eine sid erstellen, eine session!

mfg

Ich hab mal danach gesucht, aber nichts gefunden. Wie geht das?
Kann ich die player-id nicht einfach irgendwie an den socket anbinden?
Denn wenn ich alle in speiler z.b. in eine liste tue, und einer schliest den client ohne zuerst normal die verbinung zu unterbrechen, dann wird er immer in dieser list bleiben, und lauter so zeug. Wie regel ich das?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz