Stay Connected
-
Hi, wieder eine nette Frage zum Socketteil der allseits geliebten WinAPI
Ich habe einen Source (s. unten), der zu einer beliebigen Seite connectet. Wenn man auf diese Seite mit Mozilla, IE, Netscape usw. geht, erkennt ein Script dass jemand connectet und erhöht einen Besucherzähler um 1. Das Problem ist, dass wenn mein Programm zu so einer Seite connectet, wird der Zähler nicht inkrementiert
Weiß jemand warum? Ist ein "request senden" falsch?/* httpget.c * Es wird ein GET request via http an einen Webserver * gesendet und das Ergebnis auf der Konsole ausgegeben. * queeker Copyright (C) by queeks. All rights reserved. */ #include <stdio.h> #include <errno.h> #ifdef _WIN32 /* Headerfiles für Windows */ #include <winsock.h> #include <io.h> //#include <stdio.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 Port 80 */ #define HTTP_PORT 80 #define SERVER "www.kuboschek.de" #define FILE "index.htm" /****************** MAIN *********************/ int main() { struct sockaddr_in server; struct hostent *host_info; unsigned long addr; int sock; char buffer[8192]; int count; char Server[30]; char Url[60]; #ifdef _WIN32 /* Initialisiere TCP für Windows ("winsock") */ short wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD (1, 1); if (WSAStartup (wVersionRequested, &wsaData) != 0) { fprintf( stderr, "Konnte winsocket nicht initialisieren.\n"); system("PAUSE"); exit(1); } #endif /* Erzeuge das Socket */ sock = socket( PF_INET, SOCK_STREAM, 0); if (sock < 0) { perror( "Konnte Socket nicht erstellen."); system("PAUSE"); exit(1); } printf("\t\t\t****************\n"); printf("\t\t\t Q U E E K E R\n"); printf("\t\t\t****************\n"); printf("Server: "); scanf("%s", &Server); /* Erzeuge die Socketadresse des Servers * Sie besteht aus Typ, IP-Adresse und Portnummer */ memset( &server, 0, sizeof (server)); if ((addr = inet_addr( Server)) != INADDR_NONE) { /* SERVER 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(Server); if (NULL == host_info) { fprintf( stderr, "Unbekannter Server: %s\n", Url); system("PAUSE"); 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( "Konnte keine Verbindung zu Server aufbauen. \nEr ist moeglicherweise momentan nicht erreichbar.\nVersuch es spaeter noch einmal."); system("PAUSE"); exit(1); } else printf("Verbindung zu Server %s aufgebaut.\n", Server); printf("\nUrl: "); scanf("%s", &Url); printf("\nSuche ... \n\n"); /* Erzeuge und sende den http GET request */ sprintf( buffer, "GET %s HTTP/1.0\nHost: %s\n\n", Url, Server); 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); system("PAUSE"); return count; }
-
Mmh, k.a. woran das liegt, aber versuch mal folgendes :
Erstell dir eine neue Anwendung die einen Port öffnet und connecte mit dem Mozilla auf den Port. Lies dann in der Anwendung ab was der Mozilla so sendet.
Sende diesen Output an deine Website.Fertig is
-
In der Regel wird das nicht klappen, einfach den Request für die HTML-Seite zu schicken. Der Counter ist ja ein Skript, wie du gesagt hast. Dieses Skript wird aber in der HTML-Seite aufgerufen, z.B. durch ein img-Tag, wenn das Skript ein Bild des Zählers generiert.
Diesen Link musst du aufrufen. Die statische html-seite kannst du so oft aufrufen wie du willst.btw:
Ich finde das nicht ganz in Ordnung was du da vorhast. Willst du einen Counter künstlich erhöhen?p.s.:
Beim Request würde ich als Zeilenumbruch \r\n anstelle \n nehmen.
-
Das mit dem Counter war nur ein Beispiel; das ganze soll eine Art Browser werden