Socket connect() probleempje..

Status
Niet open voor verdere reacties.

erikiej1

Gebruiker
Lid geworden
29 apr 2008
Berichten
138
Ik heb deze code van internet afgekeken (want ik ben nog steeds bezig te leren hoe zockets te gebruiken ;) )
Deze code compileer ik met Dev-C++ (4.9.9.2):

Code:
#include <winsock2.h>
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    /* WinSock versie wordt gecheckt... */
    WSADATA w;
    int error = WSAStartup(0x0202,&w);
    
    if(error<0)
    {
               cout<< "Winsock 2 is niet beschikbaar.";
               WSACleanup();
               exit(1);
    }
    else
    {
               cout<< "Winsock 2 is beschikbaar!\n";
    }   
    
    
    /* Socket "s" wordt gemaakt... */
    SOCKET s = socket(AF_INET,SOCK_STREAM,0);
    if(s==SOCKET_ERROR)
    {
               cout<< "Kan geen socket maken.";
               WSACleanup();
               exit(1);
    }
    else
    {
               cout<< "Socket gemaakt!\n";
    }
    
    
    /* Socket "s" probeert verbindig te maken met 192.168.2.6 */
    sockaddr_in t;
    
    t.sin_family = AF_INET;
    t.sin_port = htons(5482);
    t.sin_addr.s_addr = inet_addr("192.168.2.6");
    
    if( connect(s,t,sizeof(t)) == SOCKET_ERROR )
    {
               cout<< "Kan geen verbinding maken met server.";
               WSACleanup();
               exit(1);
    }
    else
    {
               cout<< "Verbinding met sever gemaakt!\n";
    }
    
    cin.get();
}

Dan geeft ie deze error:

46: cannot convert `sockaddr_in' to `const sockaddr*' for argument `2' to `int connect(SOCKET, const sockaddr*, int)'

Ik heb verder op internet gezocht maar kan geen oplossing vinden, kan iemand me helpen?
 
t is nu van het type sockaddr_in terwijl hij van het type const sockaddr* moet zijn, even veranderen bij de declaratie en dan zal je compiler wel aanwijzen wat je nog meer moet veranderen
 
Nieuwe Errors

Als ik sockaddr_in t, verander in sockaddr *t dan geeft ie deze errors:

42 `sin_family' has not been declared
42 request for member of non-aggregate type before '=' token
43 `sin_port' has not been declared
43 request for member of non-aggregate type before '=' token
44 `sin_addr' has not been declared
44 request for member of non-aggregate type before '.' token

En als ik gewoon de * weglaat (sockaddr t) dan geeft ie deze errors:

42 'struct sockaddr' has no member named 'sin_family'
43 'struct sockaddr' has no member named 'sin_port'
44 'struct sockaddr' has no member named 'sin_addr'
46 cannot convert `sockaddr' to `const sockaddr*' for argument `2' to `int connect (SOCKET, const sockaddr*, int)'

...
 
Opgelost

Ik heb de oplossing al op internet gevonden. Ik moest "connect( s, t, sizeof(t) );" gewoon vervangen door "connect ( s, (SOCKADDR*) &t, sizeof(t) );"

Toch bedankt voor de hulp en moeite ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan