Wie kann ich Clients mit boost.asio und UDP unterscheiden, wobei alle Boost-Beispiele eine Mitgliedsvariable verwenden, um jeweils einen Remote-Endpunkt zu speichern. Ich muss eine Liste der Endpunkte halten und bestimmen, an welches Objekt die empfangenen Daten gesendet werden sollen, wenn es ankommt. Im Moment habe ich Code wie diesesClients mit boost asio unterscheiden
void Receive() {
boost::asio::ip::udp::endpoint client_endpoint;
char data[32];
socket_.async_receive_from(boost::asio::buffer(data, 32), client_endpoint,
boost::bind(&MyClass::onReceive, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
}
aber die client_endpoint
den Gültigkeitsbereich verlassen wird (nicht verfügbar) in der Handler-Funktion, und ich möchte ein neues Client
Objekt erstellen, wenn dies das erste Mal ist Ich erhalte von sie, oder aktualisieren Sie das entsprechende Client-Objekt, wenn dies nicht der Fall ist.
Ich dachte über eine std::set<boost::ip::udp::endpoint> client_sessions_;
als eine Mitgliedsvariable zu meinem Server halten, aber client_endpoint
ist immer noch nicht gefüllt, bis der Async-Aufruf ausgelöst wird.
Wie gehe ich damit um?
ich nicht wusste, dass ich die Unterschrift des Rückruf ändern könnte – shane