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.