winsocket



  • ich beschäftige mich seit einiger Zeit mit C++ und wollte nun eine Verbindung zu einer webseite aufbauen, nur leider bekomm ich es nicht hin den hostent zeiger von gethostbyname in struct addr_in zu casten. sieht jemand den fehler. ist wahrscheinlich irgendetwas triviales.

    borland gibt einen fehler bei

    addr.sin_addr = *(struct in_addr*) host_data->h_addr;
    

    aus mit

    [C++ Fehler] Projekt1.cpp(25): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich*

    #include <clx.h>
    #include <winsock.h>
    #pragma hdrstop
    
    #pragma argsused
    
    int main(int argc, char* argv[])
    {
    int s;
    struct sockaddr_in addr;
    s = socket( AF_INET, SOCK_STREAM, 0);
    
        if (s == -1)
            {
            perror("socket() failed");
            return 1;
            }
    
    hostent host_data;
    host_data = *gethostbyname("google.de");
    
    addr.sin_addr = *(struct in_addr*) host_data->h_addr;
    addr.sin_port =  htons(80);
    addr.sin_family = AF_INET;
    
        if (connect(s, &addr, sizeof(addr)) == -1)
            {
            perror ("connect() failed");
            return 2;
            }
    
            return 0;
    }
    

    danke für eure hilfe



  • hostent *host;
    host = gethostbyname("www.google.com");
    addr.sin_addr = *reinterpret_cast<in_addr*>(host_data->h_addr);
    

    Vielleicht den Zugriff auf Membervariablen noch mal angucken. (Dann hätte dir die Fehlermeldung auch etwas gesagt, nämlich dass host_data ein Pointer sein muss.)



  • achso ja, ok danke.

    so richtig?

    int main(int argc, char* argv[])
    {
    
    {
    		WSADATA wsa;
    		if (WSAStartup(MAKEWORD(1, 1), &wsa))
    		{
    			printf("WSAStartup() failed, %lu\n", (unsigned long)GetLastError());
    			return EXIT_FAILURE;
    		}
    }
    
    int s;
    struct sockaddr_in addr;
    s = socket( AF_INET, SOCK_STREAM, 0);
    
        if (s == -1)
            {
            perror("socket() failed");
            getch();
            return 1;
            }
    
    hostent *host_data;
    *host_data = *gethostbyname("google.de");
    
    addr.sin_addr = *(struct in_addr*) host_data->h_addr;      
    addr.sin_port =  htons(80);
    addr.sin_family = AF_INET;
    getch();
        if (connect(s, (sockaddr*)&addr, sizeof(addr)) == -1)
            {
            perror ("connect() failed");
            return 2;
            }
        else
            { cout << "connection sucessful..." << endl; }
        getch();
    
            return 0;
    }
    

    jetz meckert er aber bei

    *host_data = *gethostbyname("google.de");
    

    und bringt die Meldung

    Exception der Klasse EAccessviolation

    was habe ich denn da schon wieder falsch gemacht, aller Anfang ist schwer...



  • Guck dir doch einfach den Code an den ich geschrieben habe und ersetze bei dir die Zeilen 25 - 28. Pointer scheinst du noch gar nicht verstanden zu haben, das würde ich erst mal nachholen.


Anmelden zum Antworten