Netzwerkproblem : möchte antwort von nem php-skript



  • also ich habe vor eine Nummer und ein Kennwort zu einem PHP-Skript zu schicken, dass auf einem server-liegt. dieses skript vergleicht die daten mit einer datenbank und gibt ein OK oer FEHLER zurück...
    Die Anfrage sieht dann in etwa so aus :

    http://eine-Seite.de/?id=100000000&pw=test

    die Antwort sieht so aus :

    OK;ee777243d97d8e3cf48bb9416498e836;100000001;100000002;

    das ganze soll mit sockets geschehen...

    ich hab es schon mit diesem quelltext probiert :

    /* httpget.c
     * Demoprogramm zur Programmierung von Netzwerkclients
     * Es wird ein GET request via http an einen Webserver 
     * gesendet und das Ergebnis auf der Konsole ausgegeben. */
    #include <stdio.h>
    #include <errno.h>
    
    #ifdef _WIN32
    /* Headerfiles für Windows */
    #include <winsock.h>
    #include <io.h>
    
    #else
    /* Headerfiles für Unix/Linux */
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #define closesocket(s) close(s)
    #endif
    
    /* http requests werden normalerweise auf Port 80 
     * vom Server entgegengenommen */
    #define HTTP_PORT 80
    
    /****************** MAIN *********************/
    int main( int argc, char **argv)
    {
        struct sockaddr_in server;
        struct hostent *host_info;
        unsigned long addr;
        int sock;
        char buffer[8192];
        int count;
    
    #ifdef _WIN32  
        /* Initialisiere TCP für Windows ("winsock") */
        short wVersionRequested;
        WSADATA wsaData;
        wVersionRequested = MAKEWORD (1, 1);
        if (WSAStartup (wVersionRequested, &wsaData) != 0) {
            fprintf( stderr, "Failed to init windows sockets\n");
            exit(1);
        }
    #endif
    
        /* Sind die erforderlichen Kommandozeilenargumente vorhanden? */
        if (argc != 3) {
            fprintf( stderr, "usage: httpget server file\n");
            exit(1);
        }
    
        /* Erzeuge das Socket */
        sock = socket( PF_INET, SOCK_STREAM, 0);
        if (sock < 0) {
            perror( "failed to create socket");
            exit(1);
        }
    
        /* Erzeuge die Socketadresse des Servers 
         * Sie besteht aus Typ, IP-Adresse und Portnummer */
        memset( &server, 0, sizeof (server));
        if ((addr = inet_addr( argv[1])) != INADDR_NONE) {
            /* argv[1] ist eine numerische IP-Adresse */
            memcpy( (char *)&server.sin_addr, &addr, sizeof(addr));
        }
        else {
            /* Wandle den Servernamen in eine IP-Adresse um */
            host_info = gethostbyname( argv[1]);
            if (NULL == host_info) {
                fprintf( stderr, "unknown server: %s\n", argv[1]);
                exit(1);
            }
            memcpy( (char *)&server.sin_addr, host_info->h_addr, host_info->h_length);
        }
    
        server.sin_family = AF_INET;
        server.sin_port = htons( HTTP_PORT);
    
        /* Baue die Verbindung zum Server auf */
        if ( connect( sock, (struct sockaddr*)&server, sizeof( server)) < 0) {
            perror( "can't connect to server");
            exit(1);
        }
    
        /* Erzeuge und sende den http GET request */
        sprintf( buffer, "GET %s HTTP/1.0\n\n", argv[2]);
        send( sock, buffer, strlen( buffer), 0);
    
        /* Hole die Serverantwort und gib sie auf Konsole aus */
        do {
            count = recv( sock, buffer, sizeof(buffer), 0);
            write( 1, buffer, count);
        }
        while (count > 0);
    
        /* Schließe Verbindung und Socket */
        closesocket( sock);
        return count;
    }
    

    und dann mit

    httpget http://eine-Seite.de /?id=100000000&pw=test

    abgefragt. Das Programm hat mir dann aber nur Mist ausgegeben, kann mir jemand sagen, was falsch ist?



  • Hi

    Wie erfolgt denn der Verbindungsaufbau von der Serverseite ?
    Ich bin mir nicht sicher , aber muss der server nicht die Socket-Verbindung
    mit accept() aufbauen? Woher soll er wissen über welchen Socket und Port
    er kommunizieren soll ?

    Warum holst Du dir die Daten nicht direkt aus der Datenbank?

    Linus



  • so hat sich schon alles erledigt...
    der server brauch garnichts machen, weil er macht ja so gesehen nichts anderes als wenn man mit nem browser auf das skript zugreifen würde...
    hat sich jetzt aber alles erledigt, ich musste die korrekte IP angeben...


Anmelden zum Antworten