sockaddr daten auslesen



  • Tag.

    ich verbinde 2 programme mit udp und will beim programm, der die daten empfängt die ip des anfragestellers auslesen.
    edit sockaddr

    also wie kann ich die ip adresse und den port aus der struktur auslesen?

    MFG



  • Du musst recvfrom(..) benutzen und eine sockaddr_in (= Internet) übergeben (Du musst die Adresse casten).
    http://msdn.microsoft.com/en-us/library/aa916174.aspx
    http://msdn.microsoft.com/en-us/library/aa917469.aspx



  • Mal ne ganz dämliche Frage: Wieso muss man bei diesem ganzen Socket Zeugs überhaupt casten? Oder wird das nur überall so beschrieben und es gibt sehr wohl einen Weg ohne?



  • 314159265358979 schrieb:

    Mal ne ganz dämliche Frage: Wieso muss man bei diesem ganzen Socket Zeugs überhaupt casten? Oder wird das nur überall so beschrieben und es gibt sehr wohl einen Weg ohne?

    Die API ist so designed worden. Es würde auch ohne cast gehen, aber dafür mit memcpy. In der Doku (z.B. MSDN) wirds mit dem Cast gezeigt.

    Die API setzt sowiso eine Kompatibilität von sockaddr und sockaddr_in (etc.) voraus.

    // Ohne Cast
    sockaddr addr = {};
    recv(..., &addr, ...);
    sockaddr_in in = {};
    std::memcpy(&in, &addr, sizeof(addr));
    
    // Mit Cast
    sockaddr_in in = {};
    recv(..., reinterpret_cast<sockaddr*>(&in), ...);
    


  • Naja, memcpy ist doch eigentlich auch nur ein versteckter impliziter Cast, sauber sind für mich beide Lösungen nicht wirklich.



  • sry konnt nnet früher antworten.

    kommt es mir nur so vor, oder habt ihr gezeigt, wie man die ip setzt.
    ich will die aber auslesen in dem normalen format. also z.b. 192.156.124.2
    in char oder string.


  • Administrator

    bammes schrieb:

    kommt es mir nur so vor, oder habt ihr gezeigt, wie man die ip setzt.
    ich will die aber auslesen in dem normalen format. also z.b. 192.156.124.2
    in char oder string.

    Nein, es wurde dir schon der richtige Hinweis gegeben.
    recvfrom hat einen 5. Parameter from vom Typ sockaddr . In die darin übergebenen Struktur wird der Sender gespeichert.

    Am besten schaust du diese Links an:
    recvfrom
    sockaddr
    in_addr
    inet_ntoa

    Damit sollte es zu schaffen sein.

    Grüssli

    PS: Du bist im falschen Forum. Das gehört in die WinAPI 😉



  • 314159265358979 schrieb:

    Naja, memcpy ist doch eigentlich auch nur ein versteckter impliziter Cast, sauber sind für mich beide Lösungen nicht wirklich.

    Ist halt ne C-API, da ist ganz generell gar nichts sauber. 🤡

    bammes schrieb:

    kommt es mir nur so vor, oder habt ihr gezeigt, wie man die ip setzt.

    Nein, wenn du dir theta's Link richtig durchgelesen hättest, wüsstest du jetzt, dass recvfrom() genau das ist, was du suchst.

    Edit:
    Schon wieder zu langsam, das gibt's doch gar nicht. 🙂



  • k thx.

    hab jetzt die ip



  • cooky451 schrieb:

    314159265358979 schrieb:

    Naja, memcpy ist doch eigentlich auch nur ein versteckter impliziter Cast, sauber sind für mich beide Lösungen nicht wirklich.

    Ist halt ne C-API, da ist ganz generell gar nichts sauber. 🤡

    Sauber ist Definitionssache 🤡


Anmelden zum Antworten