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

10.06.2003, 17:54

PHP-Seite auslesen/auswerten

Hi Leutz !

Ich will für mein nächstes Projekt per PHP einen Webserver ermöglichen. Das abrufen geht dank davids code auch. (benutzt doch kein winsock, weil ich das noch nich kann, benutzt halt wininet und dplay).

Ich kann auch schon die die Zuordnen (servername, ip etc.). Leider geht das aber nicht gut. Ist z.b. ein Leerzeichen im Namen wird der 2. Teil als die IP angesehen =/

Ausserdem kann ich mit sscanf aus dem Buffer nur den obersten auslesen, weil das scheiss ding nich weiter runter geht.

Hat jemand ne Idee wie man das besser Regeln könnte ?

Hier mein code:

Quellcode

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
#include <WinINet.h>
#include <stdio.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

    HINTERNET hInternet; 
    HINTERNET hFile; 
    DWORD dwNumBytesRead; 
    char acBuffer[65535]; 

    if(InternetAttemptConnect(0) != ERROR_SUCCESS) return false; 
    if(!InternetCheckConnection("http://mitglied.lycos.de", FLAG_ICC_FORCE_CONNECTION, 0)) return false; 

    hInternet = InternetOpen("RedWater INet System", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 
    if(hInternet == NULL) return false; 

    hFile = InternetOpenUrl(hInternet, "http://web244.essen082.server4free.de/server.php?action=getlist", NULL, 0, INTERNET_FLAG_RELOAD, 0); 
    if(hFile == NULL) 
    { 
       InternetCloseHandle(hInternet); 
       return false; 
    } 

    ZeroMemory(acBuffer, 65535); 
    if(!InternetReadFile(hFile, acBuffer, 65535, &dwNumBytesRead)) 
    { 
       InternetCloseHandle(hFile); 
       InternetCloseHandle(hInternet); 
       return false; 
    } 

    char server[255];
    char ip[15];
    int port;
    int player;
    int maxplayer;
    char map[255];
    int gamestartet;

    sscanf(acBuffer,"%s\n%s\n%i\n%i\n%i\n%s\n%i",&server,&ip,&port,&player,&maxplayer,&map,&gamestartet);
    
    sprintf(acBuffer,"server:%s \nip: %s \nport: %i \nplayer: %i / %i \ngamestartet: %i",server,ip,port,player,maxplayer,map,gamestartet);
    MessageBox(NULL,acBuffer,"PHPTEST",MB_OK);

    // In acBuffer befindet sich jetzt der HTML-Text von index.php. 

    InternetCloseHandle(hFile); 
    InternetCloseHandle(hInternet);

    return 0;
}


thx

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

10.06.2003, 18:06

Man kann sscanf anweisen, das Leerzeichen nicht als Ende eines Strings zu sehen. Um Beispielsweise das Neue-Zeile-Zeichen (\n) als Ende zu nehmen, gibst Du anstatt %s folgendes an: %[^\n]
Das bedeutet, dass er alle Zeichen zum String rechnet, außer (dafür steht das "^") das "\n". Da könnte auch %[^A] stehen, dann würde er bei einem A aufhören.
Du kannst es aber auch so machen, dass die Länge aller Felder fix ist, dann gibt es kein Problem damit. Dann kannst Du z.B. sagen, dass die Server-Angabe bei Zeichen 0 beginnt und bei Zeichen 63 endet usw..

3

10.06.2003, 18:31

cool danke man ^^

jetzt muss ich nur noch das ding irgendwie die anderen Server auslesen lassen können. Momentan liesst er nur den 1. Server.

Hast du da auch ne Idee ? Sowas wie SetStreamPos oder sowas ?

4

12.06.2003, 17:34

*push*

Anonymous

unregistriert

5

17.06.2003, 13:55

*push*

6

18.06.2003, 19:16

Hmm .... Also es muss an sscanf liegt !

Denn fscanf geht in die nächste Zeile wenn man es erneut aufruft. Nur eben sscanf nich :/

Momentan schreib ich mir selbst so ne Funktion :)

cya

Werbeanzeige