Fehler bei Socketerstellung (connect) Konvertierung von 'sockaddr *' nach 'char *' nicht möglich



  • Hi,
    ich bekomme folgenden Fehler bei dem Versuch eine verbindung aufzubauen:
    **[C++ Fehler] socket.cpp(30): E2034 Konvertierung von 'sockaddr ' nach 'char ' nicht möglich ich kann mir den Fehler nicht erklären da ich in allen quelltexten und Tutorials es so gesehen habe

    Das ist der Dazugehörige Quelltext

    AnsiString mySocket::connect(int Port, char* IP){
            // Verbinden
            memset(&address,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
            address.sin_family=AF_INET;
            address.sin_port=htons(Port); // port 12345
            address.sin_addr.s_addr=inet_addr(IP); // zielrechner IP
    
            rc=connect(MySocket,(sockaddr*)&address, sizeof(SOCKADDR));//hier bekomme ich den fehler ((sockaddr*)&address ist falsch)
            if(rc==SOCKET_ERROR)
            {
                    SockedError ="Fehler: connect gescheitert, fehler code:" + WSAGetLastError();
                    return SockedError;
            }
            return 0;
    
    }
    

    Wenn ihr noch mehr Code braucht dann schreibt es.

    Ich poste nur noch die Variablen Deklaration der Klasse:

    private:
            AnsiString rc;
            AnsiString SockedError;
            SOCKET MySocket;
            SOCKADDR_IN address;
    

    Danke euch schonmal!!

    mfg
    wdsl



  • Nur weil du 'nen AnsiString zurückgibst ist das noch kein BCB-Problem. 😉
    Reine Sockets sind WinAPI, verschoben.



  • Entschuldigung, ich habe mir halt gedacht weil die Compilerausgabe ja von Borland Compiler stammt das es dahin gehört aber jetzt passt ja hoffentlich alles 😉



  • Schreib mal dein Connect so.

    rc=connect(MySocket,(struct sockaddr*)&address, sizeof(SOCKADDR));//
    


  • Kommt leider geneu der gleiche Fehler ich weis nicht was ich noch machen soll ich habe alles was mit einfällt schon ausprobiert



  • zeig mal mehr code



  • wdsl schrieb:

    AnsiString mySocket::connect(int Port, char* IP){
    // Verbinden
    memset(&address,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
    address.sin_family=AF_INET;
    address.sin_port=htons(Port); // port 12345
    address.sin_addr.s_addr=inet_addr(IP); // zielrechner IP

    rc=connect(MySocket,(sockaddr*)&address, sizeof(SOCKADDR));//hier bekomme ich den fehler ((sockaddr*)&address ist falsch)
    if(rc==SOCKET_ERROR)
    {
    SockedError ="Fehler: connect gescheitert, fehler code:" + WSAGetLastError();
    return SockedError;
    }
    return 0;

    }

    sorry aber mit codetags funktioniert das highlighting nicht, schreib das connect einfach Connect... vielleicht geht's dann 😃

    rapso->greets();



  • Ok das ist meine Socket.cpp

    AnsiString mySocket::Init(){
            // Winsock starten
            rc=startWinsock();
            if(rc!=0)
            {
                    SockedError = "Fehler: startWinsock, fehler code:" + rc;
                    return SockedError;
            }
    
            // Socket erstellen
            MySocket=socket(AF_INET,SOCK_STREAM,0);
            if(MySocket==INVALID_SOCKET)
            {
                    SockedError = "Fehler: Der Socket konnte nicht erstellt werden, fehler code:" + WSAGetLastError();
                    return SockedError;
            }
            return 0;
    
    }
    
    AnsiString mySocket::connect(int Port, char* IP){        
            // Verbinden
            memset(&address,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
            address.sin_family=AF_INET;
            address.sin_port=htons(Port); // port 
            address.sin_addr.s_addr=inet_addr(IP); // zielrechner IP
    
            rc=connect(MySocket,(struct sockaddr*)&address, sizeof(SOCKADDR));
            if(rc==SOCKET_ERROR)
            {
                    SockedError ="Fehler: connect gescheitert, fehler code:" + WSAGetLastError();
                    return SockedError;
            }
            return 0;
    
    }
    
    AnsiString mySocket::MySend(char* buf){
            send(MySocket, buf, strlen(buf), 0);
    }
    
    AnsiString mySocket::Myrecive(){
    }
    
    int mySocket::startWinsock()
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    
    //Standart functionenen
    mySocket::~mySocket()
    {
            closesocket(s);
            WSACleanup();
    }
    
    mySocket::mySocket()
    {
            Init();
    }
    

    das ist meine socket.h

    #include <winsock2.h>
    #include <system.hpp>
    
    class mySocket{
    public:
            mySocket();
            ~mySocket();
    private:
            AnsiString rc;
            AnsiString SockedError;
            SOCKET MySocket;
            SOCKADDR_IN address;
    
            int startWinsock();
            AnsiString Init();
            AnsiString connect(int Port, char* IP);
            AnsiString MySend(char* buf);
            AnsiString Myrecive();
    
    };
    

    Brauchst du noch mehr?? Wobei das das include File zu allen Socket aufgaben ich wollte ja erstmal den Socket initialiesieren und dann das mit dem Dateiaustausch testen aber das initiailiersen klappt ja schon net ;-((

    mfg
    wdsl



  • wdsl schrieb:

    rc=connect(MySocket,(sockaddr*)&address, sizeof(SOCKADDR));

    Hmm, muss man da nicht statt sizeof(SOCKADDR) sizeof(sockaddr_in) nehmen ?
    ...aber das nur nebenbei...



  • Doch muss man habe ich auch ausgebessert. Danke dir aber mein Problem gibts immer noch ;-((



  • und mein vorschlag hilft auch net?
    sonst caste es auf void*



  • Habe deinen Fehler gefunden.

    AnsiString mySocket::connect(int Port, char* IP){

    [quote] rc=connect(MySocket,(struct sockaddr*)&address, sizeof(SOCKADDR));
    [/list]

    Ich hoffe dir fällt was auf.



  • hi,
    mag ja eine dumme idee sein, aber vielleicht nutzt es was, wenn du deine connect-Methode mal umbenennst z.b. in myConnect



  • *sichunsichtbarfühlt*

    hab ich das nicht schon geschrieben? 😮



  • @rapso
    huch....doch hast du....meine güte ich brauch ne brille 🙂
    ich tu's auch nie wieder!!!



  • @all Danke fuer die hilfe man alle functionen nenne ich um nur die wo der Fehler ist net 😞

    @rapso muss zugeben ich habe dich übersehen das lag daran das ich "a" post gelesen habe dann nicht aktualisert habe und meinen Post drunter gesetzt habe und das was oben war net mehr gelesen habe.

    Auf allen fällen gehts jetzt erstmal und nochmal vielen Dank an alle die mir geholfen haben



  • @rincewind
    ok, ich verzeihe dir ;D, aber nur weil dein nick so klasse ist 🙂

    /me scheibenwelt mag

    rapso->greets();



  • @rapso
    UGH!


Anmelden zum Antworten