Sockets macht Probleme.
-
//edit: sorry... topic gehört eher in Unix/Linux.
Hallo!
Seit mehreren Wochen nun lern ich schon C++ und nun wollte ich mal ausprobieren, eine TCP-Verbindung herzustellen.
Hab mir ein paar Infos aus dem Netz gesucht und zur Zeit sieht mein code so aus:#include <iostream> #include <fstream> #include <string> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> using namespace std; int main (int argc, char * const argv[]) { int s = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addr; if (s == -1) { perror("socket() failed"); return 1; } 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; } return 0; }Nur zur Info: Ich verwende Mac OS X.
In einer der letzten Zeilen wo es heisst:
if (connect(s, &addr, sizeof(addr)) == -1) {Kommt ein Fehler auf:
error: cannot convert 'sockaddr_in*' to 'const sockaddr*' for argument '2' to 'int connect(int, const sockaddr*, socklen_t)'Kann mir da wer helfen?
-
caste addr nach sockaddr*
-
Wie mach ich das?
//edit: Also ich mein, wie mach ich das, weil es steht nirgends sockaddr*.
-
if (connect(s, (sockaddr*)&addr, sizeof(addr)) == -1) { ...
-
if (connect(s, (const sockaddr*)&addr, sizeof(addr)) == -1) { // ... }
-
Muss man casts nicht in spitzen klammern schreiben? also <...>? Fuer was waren sonst nochmal die <>?
-
Unter C++ nutzt man normalerweise static_cast<T>, dynamic_cast<T> und reinterpret_cast<T>.
Das würde dann so aussehen:
if (connect(s, static_cast<const sockaddr*>(&addr), sizeof(addr)) == -1) { // ... }Ansonsten nutzt man spitze Klammern bei Templates.