Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.09.2009, 23:04

Multiplayerspiel mit Webspace und PHP als Serversprache

Hi,
ich möchte in nächster Heit ein bisschen im Multiplayermodus arbeiten. Dazu suche ich folgendes:
Ich möchte eine URL aufrufen: http://webserver/multiplayer/lobby.php
Dort wird eine XML-Datei zurückgegeben, die dann vom Client geparst und verarbeitet wird.

Mein Frage ist nun wie ich so etwas anstellen könnte oder ob es noch alternativen gibt, wenn ich mit einem PHP-Webserver arbeiten möchte.

Grüße
Twinky

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

2

21.09.2009, 23:46

Re: Multiplayerspiel mit Webspace und PHP als Serversprache

Zitat von »"Twinky"«

Mein Frage ist nun wie ich so etwas anstellen könnte

Wo genau ist da denn genau das Problem?
<< an dieser Stelle ist eine Signatur verstorben >>

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

3

22.09.2009, 06:46

Im Grunde hast du schon gesagt wie man es macht. Online bearbeitet dein User irgendwelche Formulare Front-ends keine Ahung. Alles was er macht wird könnte, wie du schon gesagt hast in einer XML-File gespeichert werden.

Der Server auf deinem Webspace parst nun mit einer eigenen oder schon fertigen Bibliothek (Beispielsweise TinyXML mit ticpp als Wrapper) deine XML-File.

D.h für dich. Du schaust dir mal TinyXML an und eignest dir an wie man XML-Files parst/bearbeitet oder speichert (wie auch immer). Eventuell kannst du noch ticpp benutzen. Stellt zusätzlich zu TinyXml noch template casting, iterieren per iterator und vorallem Exceptions bereit.

grüße Toa

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

4

22.09.2009, 08:47

Ein Problem könnte darstellen, dass solche Arten der Anwendungen bei den meisten Webhostern (insbesondere Freehostern) nicht erlaubt sind.

Technisch ist HTTP für Spiele nur bedingt geeignet, da du kaum eine Möglichkeit hast Verbindungen vom Server aus zu initiieren, der Server kann nur auf den Client antworten.
Eine Möglichkeit wäre es HTTP Verbindungen offen zu halten, doch da Webserver oft eine beschränkte Zahl von HTTP Verbindungen zulassen, kann dies auch Problematisch werden.

5

22.09.2009, 14:05

Worauf zielt deine Frage eigentlich ab?
Geht es darum, wie du das PHP Skript aufrufen und an die Daten der Rückgabe kommen kannst?

Was willst du denn über PHP realisieren? Nur die Lobby oder mehr?

6

22.09.2009, 16:15

Zitat von »"chriss"«

Worauf zielt deine Frage eigentlich ab?
Geht es darum, wie du das PHP Skript aufrufen und an die Daten der Rückgabe kommen kannst?

Was willst du denn über PHP realisieren? Nur die Lobby oder mehr?

Erstmal möchte ich nur so etwas wie ein Lobby machen um ein Gefühl dafür zu bekommen. Danke schonmal für den Tip mit TinyXML das werde ich mir mal angucken.

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

7

22.09.2009, 17:20

Meist du so in etwa:
(habs jetzt nicht getestet und halb aus nem anderen projekt makiert)


lobby.php

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<server-list>
<?php
// Alle Server Ausgeben


for($i = 1; $i < 10; ++$i)
{
  echo "<Server name='Server ".$i."' />";
}


?>
</server-list>




game.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <list>
#include <windows.h>
#include <Wininet.h> 
#include <tinyxml.h>


using namespace std;

void DownloadXml(TiXmlDocument* _doc, const std::string& addr)
{
    HINTERNET hInternet; 
    HINTERNET hFile;

    cout << "Verbinde..." << endl;

    hInternet = InternetOpen(   "Firefox", 
                                INTERNET_OPEN_TYPE_PRECONFIG, 
                                NULL, 
                                NULL, 
                                0);

    hFile = InternetOpenUrl(hInternet, 
                            addr,
                            NULL, 
                            0, 
                            INTERNET_FLAG_NO_CACHE_WRITE, 
                            0); 
    if(!hFile)
        throw string("Es konnte keine Verbindung zum Server hergestellt werden !");

    const DWORD _BufferSize = 4096;

    bool    first = true;
    char    Buffer[_BufferSize];
    DWORD   readSize;
    string  downloadData;
    downloadData.reserve(262144);


    cout << "Download...";


    while( InternetReadFile(hFile, Buffer, _BufferSize - 1, &readSize) != FALSE)
    {
        if(readSize == 0)
            break;

        Buffer[readSize] = '\0';

        if(first)
        {
            // Der Xml-kopf muss entfernt werden, weil tinyXml nur die Nodes parsed

            string temp(Buffer);
            downloadData += temp.erase(0, temp.find("?>") + 2);
            first = false;
        }else
            downloadData += Buffer;
    }

    InternetCloseHandle(hFile); 
    InternetCloseHandle(hInternet);

    cout << downloadData.size() << " Byte\n";

    cout << "Parse Xml..." << endl;

    _doc->Parse(downloadData.c_str() );

    if(_doc->Error())
        throw string("Fehler bei der der herruntergeladenen xml(" + string(_doc->ErrorDesc()) + ")!");
}


int Start()
{
    TiXmlDocument doc;

    DownloadXml(&doc, "http//:mein.server.de/lobby.php");
    // So jetzt muss nur noch geparsed werden... aber darauf hab ich gerade keine lust :)

    return 0;
}



int main()
{
    try{
        return Start();
    }catch(string e)
    {
        cout << "\nFehler:\n" << e.c_str();
        cin.get();

        return 1;
    }catch(...)
    {
        cout << "\nEs ist ein unbekannter Fehler aufgetreten !";
        cin.get();

        return 2;
    }
}



PS: Wiso wird der Code eigentlich immer falsch gefärbt ?

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

8

22.09.2009, 17:30

Zitat von »"Databyte"«

PS: Wiso wird der Code eigentlich immer falsch gefärbt ?


Hier im Forum? Weil das Code Plugin nicht ganz bugfrei ist :)

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

9

22.09.2009, 17:34

Zitat von »"rewb0rn"«

Zitat von »"Databyte"«

PS: Wiso wird der Code eigentlich immer falsch gefärbt ?


Hier im Forum? Weil das Code Plugin nicht ganz bugfrei ist :)

Das ist natürlich doof :) :lol:

Lerikson

Alter Hase

Beiträge: 412

Wohnort: nördlich von Hamburg

Beruf: Schüler

  • Private Nachricht senden

10

22.09.2009, 18:15

Zitat

Das ist natürlich doof

gibt schlimmeres, :D

Werbeanzeige