UDP-Datenübertragung



  • Hallo,

    ich hab ein kleines Programm eines UDP-Clients, der von einem Server Daten empfängt und Daten zum Server senden kann.
    Hier ein Auszug:

    //Erstellen des UDP-Sockets
    SOCKET sock = SOCKET_ERROR;
    char buf[1024];
    char replybuf[1024];
    int Laenge;
    int laen = sizeof(saddr);
    memcpy ((char *)&saddr.sin_addr,host->h_addr,host->h_length);
    saddr.sin_family=host->h_addrtype;
    saddr.sin_port=htons(port);
    strcpy(&saddr.sin_addr, "127.0.0.1");
    sock = socket(host->h_addrtype, SOCK_STREAM, IPPROTO_UDP);
    
    //Datenempfang
    recvfrom(sock, buf, sizeof(buf), 0, &saddr, &laen)
    
    //Daten senden
    sendto (sock, replybuf, 1024, 0, &client_addr, laen);
    

    Leider erhalte ich folgende Fehlermeldungen beim Compilieren:
    *
    error C2664: 'strcpy': Konvertierung des Parameters 1 von 'in_addr *__w64 ' in 'char *' nicht möglich. Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    error C2664: 'recvfrom': Konvertierung des Parameters 5 von 'sockaddr_in *__w64 ' in 'sockaddr *' nicht möglich. Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    error C2664: 'sendto': Konvertierung des Parameters 5 von 'sockaddr_in *__w64 ' in 'const sockaddr *' nicht möglich. Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    *

    Wer kann mir weiterhelfen, wie ich die Serveradresse in "saddr.sin_addr" bekomme und was ich als Parameter 5 der Funktionen "recvfrom" und "sendto" einsetzen muss.

    Falk2003



  • hi,

    du musst inet_addr benutzen:
    saddr.sin_addr.s_addr = inet_addr( "127.0.0.1" );

    und den struct sockaddr_in musst du in struct sockaddr casten:
    recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr*)&saddr, &laen)

    falls du c++ programmierst benutz reinterpret_cast:
    recvfrom(sock, buf, sizeof(buf), 0,
    reinterpret_cast<struct sockaddr*>(&saddr), &laen)



  • Ich dank dir entelechie! 👍

    Funktioniert prima! 😃

    Falk2003


Anmelden zum Antworten