WinSocket-Problem



  • Ich experimentiere gerade etwas mit Sockets herum, nach dieser Anleitung:
    http://www.pc-adviser.de/socket_programmierung.html#socket

    Ich hab den Code genau so wie da zusammengefügt:

    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <sys/types.h>
    #include <winsock2.h>
    
    using namespace std;
    
    int main(){
    
        /* Winsocket initialisieren */
    	WSADATA wsa;
    	if (WSAStartup(MAKEWORD(1, 1), &wsa)) {                   
    	   printf("WSAStartup() failed, %lu\n", (unsigned long)GetLastError());
    	   return EXIT_FAILURE;
        }
    
        int s; //socket
        s = socket(AF_INET, SOCK_STREAM, 0);
        if (s == -1) {
    	   perror("socket() failed");
    	   return 1;
        }
    
        struct sockaddr_in addr;
        addr.sin_addr.s_addr = inet_addr("127.0.0.1");
        addr.sin_port = htons(80);	
        addr.sin_family = AF_INET;
    
        if (connect(s, &addr, sizeof(addr)) == -1) {
    	   perror("connect() failed");
    	   return 2;
        }
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    bekomme aber leider diese Meldung:

    ...cannot convert `sockaddr_in*' to `const sockaddr*' for argument `2' to `int connect(SOCKET, const sockaddr*, int)'
    

    wenn ich aber:

    struct sockaddr_in addr;
    

    in

    struct sockaddr addr;
    

    geht garnichts mehr, ich blick da gerade echt nicht durch...



  • Hey,

    versuchs doch mal so:

    if (connect(s, (SOCKADDR*)&addr, sizeof(addr)) == -1) {
    	perror("connect() failed");
    	return 2;
    }
    


  • joa super danke es klappt, aber jetzt hab ich ein anderes Problen, ich kann bei

    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    

    nur eine IP eingeben, würde aber gerne eine URL eingeben...(um später davon zu lesen, downloaden usw.),

    ich finde leider nur ewig lange scripte zu gethostbyname(), das muss doch einfacher gehen, oder?
    Ich habe dsa mal mit python gemacht da ging das Problemlos, und es gab auch fstream oder so ähnlich um von der Website zu lesen usw...gibt es da für C auch so etwas?



  • Naja das geht dann folgendermaßen:

    struct sockaddr_in addr;
    //addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    
    addr.sin_addr.s_addr = *(u_long *) gethostbyname("www.google.com")->h_addr_list[0];
    //printf("IP Address: %s\n", inet_ntoa(addr.sin_addr)); // So könntest du die IP auch noch ausgeben
    
    addr.sin_port = htons(80);   
    addr.sin_family = AF_INET;
    
    if (connect(s, (SOCKADDR*)&addr, sizeof(addr)) == -1) {
    	perror("connect() failed");
    	return 2;
    }
    

    😉


Anmelden zum Antworten