recv() Funktion



  • Hi,

    ich hab ein Problem mit recv()...

    Und zwar bekomm ich nix zurück. Vielleicht sieht jemand von euch den Fehler:

    Beim Fenster erstellen:

    WSAStartup(MAKEWORD(2,0),&wsa);
    s = socket(PF_INET,SOCK_STREAM,0);
    
    //*** fill srv ***//
    //empty srv
    memset(&srv, 0, sizeof(srv));
    //check if ipaddress is a address or dns string
    if (inet_addr(IPAddress) == INADDR_NONE)
    {
    	dnsip = gethostbyname(IPAddress);
    	if (dnsip)
    		memcpy(&srv.sin_addr, dnsip->h_addr_list[0], sizeof(dnsip));
    	else
    		return 0;
    }
    else
    {
    	srv.sin_addr.s_addr = inet_addr(IPAddress);
    }
    srv.sin_port = htons(iPort);
    srv.sin_family = AF_INET;
    
    closesocket(s);
    WSACleanup();
    

    Beim connect:

    int	iError_connect;
    int	iError_send;
    int	recvbytes = 1;
    int	iError_recive = 0;
    char recvbuf[64];
    
    //*** create socket ***//
    WSAStartup(MAKEWORD(2,0),&wsa);
    s = socket(PF_INET,SOCK_STREAM,0);
    
    //*** set timeout 1 sec ***//
    int lenght = 1;
    setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(const char*)&lenght,sizeof(lenght));
    
    //*** connect to server ***//
    iError_connect = connect(s,(struct sockaddr*) &srv, sizeof(srv));
    
    //*** send request ***//
    iError_send = send (s, cRequest, strlen(cRequest), 0);
    
    //*** get recive ***//
    do
    { 
    	recvbytes = recv(s, recvbuf, sizeof(recvbuf), 0);
    	if (recvbytes > 0)
    		iError_recive++;
    } while(recvbytes > 0);
    
    closesocket(s);
    WSACleanup();
    

    iPort ist 8080
    IPAddress ist 10.101.1.223
    cRequest ist GET http://10.101.1.223/index.html HTTP/1.0\nHost: 10.101.1.223\n\n



  • oh man... ok hab den Fehler 🙄

    bei:

    if (inet_addr(IPAddress) == INADDR_NONE) 
    { 
        dnsip = gethostbyname(IPAddress); 
        if (dnsip) 
            memcpy(&srv.sin_addr, dnsip->h_addr_list[0], sizeof(dnsip)); 
        else 
            return 0; 
    } 
    else 
    { 
        srv.sin_addr.s_addr = inet_addr(IPAddress); 
    }
    

    da war das mit der Namensauflösung falsch!
    Nicht:
    memcpy(&srv.sin_addr, dnsip->h_addr_list[0], sizeof(dnsip));
    sondern:
    memcpy( (char *)&srv.sin_addr, dnsip->h_addr, dnsip->h_length);

    Jetzt funkt das auch!!! 😃


Anmelden zum Antworten