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.


Anmelden zum Antworten