AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi 4-gewinnt fertig, jetzt online machen
Thema durchsuchen
Ansicht
Themen-Optionen

4-gewinnt fertig, jetzt online machen

Ein Thema von k4ni · begonnen am 16. Mai 2008 · letzter Beitrag vom 31. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#1

4-gewinnt fertig, jetzt online machen

  Alt 16. Mai 2008, 17:03
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
Angehängte Dateien
Dateityp: rar 4_wins_133.rar (276,6 KB, 42x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: 4-gewinnt fertig, jetzt online machen

  Alt 16. Mai 2008, 17:09
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: 4-gewinnt fertig, jetzt online machen

  Alt 16. Mai 2008, 17:13
Einen Haupt-Server so zu sagen auf den alle clients raufgehen.
  Mit Zitat antworten Zitat
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: 4-gewinnt fertig, jetzt online machen

  Alt 17. Mai 2008, 00:56
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?
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#5

Re: 4-gewinnt fertig, jetzt online machen

  Alt 17. Mai 2008, 00:57
Bitte mit Screenshot!
  Mit Zitat antworten Zitat
Benutzerbild von MSSSSM
MSSSSM

Registriert seit: 18. Apr 2008
223 Beiträge
 
Delphi 7 Professional
 
#6

Re: 4-gewinnt fertig, jetzt online machen

  Alt 17. Mai 2008, 09:16
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;
Marius
  Mit Zitat antworten Zitat
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: 4-gewinnt fertig, jetzt online machen

  Alt 17. Mai 2008, 12:48
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.
  Mit Zitat antworten Zitat
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: 4-gewinnt fertig, jetzt online machen

  Alt 17. Mai 2008, 15:34
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');
Angehängte Dateien
Dateityp: rar 4gewinnt-online_106.rar (503,8 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von MSSSSM
MSSSSM

Registriert seit: 18. Apr 2008
223 Beiträge
 
Delphi 7 Professional
 
#9

Re: 4-gewinnt fertig, jetzt online machen

  Alt 17. Mai 2008, 15:41
eine sid erstellen, eine session!

mfg
Marius
  Mit Zitat antworten Zitat
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: 4-gewinnt fertig, jetzt online machen

  Alt 17. Mai 2008, 16:24
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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr.
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