SOCKET connect geht nicht!



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Schonmal daran gedacht, dass google vllt. keinen server am laufen hat, mit denen sich hobby-programmierer verbinden können?

    Mfg Ominion



  • Ominion schrieb:

    Schonmal daran gedacht, dass google vllt. keinen server am laufen hat, mit denen sich hobby-programmierer verbinden können?

    Mfg Ominion

    lol 🤡



  • LOL



  • Hi,
    Was heißt das jetzt genau?
    Es liegt nicht an google da es ja auch bei anderen servern nicht funktioniert!

    MFG ReduX



  • Lass dir den Rückgabewert von WSAGetLastError() aufgeben anstatt perror zu benutzen. Bei mir funzt dein Code übrigens.



  • *hust**würg**hust**klopf* ah besser...

    Doch, genau daran liegt es sehr wahrscheinlich. Überlege doch mal: Du möchtest dich mit einem Server verbinden. Dieser Server oder zumindest seine Adresse stellt google dar. Allerding läuft auf dieser Adresse gar kein Server, der bereit ist, sich mit dir zu verbinden. Dann wird geguckt: "Aha, eigentlich gibt es gar kein Problem; Die Adresse gibt es, also No error". Dann kommt aber: "Momment, es gibt ja gar kein Serverprogramm mit dem ich mich verbinden kann! Also ist connect fehlgeschlagen -> -1". Und das ist eben das Problem bei dir, er kann sich nicht mit etwas verbinden, was nicht da ist. Und genau das ist auch bei den anderen der Fall: Es läuft kein Server auf dieser Adresse, mit dem dein Client kommunizieren kann!



  • BitWax schrieb:

    *hust**würg**hust**klopf* ah besser...

    Doch, genau daran liegt es sehr wahrscheinlich. Überlege doch mal: Du möchtest dich mit einem Server verbinden. Dieser Server oder zumindest seine Adresse stellt google dar. Allerding läuft auf dieser Adresse gar kein Server, der bereit ist, sich mit dir zu verbinden. Dann wird geguckt: "Aha, eigentlich gibt es gar kein Problem; Die Adresse gibt es, also No error". Dann kommt aber: "Momment, es gibt ja gar kein Serverprogramm mit dem ich mich verbinden kann! Also ist connect fehlgeschlagen -> -1". Und das ist eben das Problem bei dir, er kann sich nicht mit etwas verbinden, was nicht da ist. Und genau das ist auch bei den anderen der Fall: Es läuft kein Server auf dieser Adresse, mit dem dein Client kommunizieren kann!

    LOL



  • Hast du etwas gegen meine sehr unanspruchsvolle Erklärung?



  • Natürlich kannst du nach google.de connecten. Hab ich selber auch schon gemacht.



  • jetzt stellen wir uns doch einfach mal so google würde eine verbindung auf port 80 nicht zulassen, hmmmm . das wär aber dumm

    Dann könnten die aber schnell einpacken, die guten google mitarbeiter



  • schonmal versucht gleich danach was zu senden und zu empfangen. (Guck dir mal den Artikel zu http hier im Forum an).



  • Ok, wenn es gehen sollte, dann nehme ich es zurück, bei mir hat das bloß noch nie funktioniert...wahrscheinlich mache ich dann genau den gleichen Fehler wie ReduX



  • #include <stdio.h>
    #include <errno.h>
    #include <string>
    
    /* Windows-System */
    #ifdef _WIN32
    #include <winsock.h>
    #include <io.h>
    /* Unix-System */
    #else
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    #include <unistd.h>
    #endif
    #define HTTP_PORT 80
    int main(int argc, char **argv)
    {
    int sock;
    struct sockaddr_in host_addr;
    struct hostent *hostinfo;
    char *host, *file;
    char command[1024];
    char buf[1024];
    unsigned int bytes_sent, bytes_recv;
    /* Ist der Aufruf korrekt? */
    if (argc != 3) {
    fprintf (stderr, "Aufruf: httprecv host file\n");
    exit (EXIT_FAILURE);
    }
    host = argv[1];
    file = argv[2];
    /* ggf. Winsock initialisieren */
    #ifdef _WIN32
    WSADATA wsaData;
    if (WSAStartup (MAKEWORD(1, 1), &wsaData) != 0) {
    fprintf (stderr, "WSAStartup(): Kann Winsock nicht initialisieren.\n");
    exit (EXIT_FAILURE);
    }
    #endif
    /* Socket erzeugen */
    sock = socket (AF_INET, SOCK_STREAM, 0);
    if (sock == -1) {
    perror ("socket()");
    exit (EXIT_FAILURE);
    }
    /* Adresse des Servers festlegen */
    memset( &host_addr, 0, sizeof (host_addr));
    host_addr.sin_family = AF_INET;
    host_addr.sin_port = htons (HTTP_PORT);
    host_addr.sin_addr.s_addr = inet_addr (host);
    if (host_addr.sin_addr.s_addr == INADDR_NONE) {
    /* Server wurde nicht mit IP sondern mit dem Namen angegeben */
    hostinfo = gethostbyname (host);
    if (hostinfo == NULL) {
    perror ("gethostbyname()");
    exit (EXIT_FAILURE);
    }
    memcpy((char*) &host_addr.sin_addr.s_addr, hostinfo->h_addr, hostinfo->h_length);
    }
    /* Verbindung aufbauen */
    if (connect(sock, (struct sockaddr *) &host_addr, sizeof(struct sockaddr)) == -1) {
    perror ("connect()");
    exit (EXIT_FAILURE);
    }
    /* HTTP-GET-Befehl erzeugen */
    sprintf (command, "GET %s HTTP/1.0\nHost: %s\n\n", file, host);
    /* Befehl senden */
    bytes_sent = send (sock, command, strlen (command), 0);
    if (bytes_sent == -1) {
    perror ("send()");
    exit (EXIT_FAILURE);
    }
    // Antwort des Servers empfangen und ausgeben */
    while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) {
    write (1, buf, bytes_recv);
    }
    if (bytes_recv == -1) {
    perror ("recv()");
    exit (EXIT_FAILURE);
    }
    printf ("\n");
    #ifdef _WIN32
    closesocket(sock);
    WSACleanup();
    #else
    close(sock);
    #endif
    return 0;
    }
    

    Da schaut euch mal den Bspl. Http Client von Ulrich Vogel an.
    (Funktioniert auch mit Google 😉 )

    //Edit gebt mal als Datei test.txt an 😃


Anmelden zum Antworten