Sto scrivendo un server in C++ usando la libreria ASIO Boost. Mi piacerebbe ottenere la rappresentazione di stringa dell'IP del client da mostrare nei log del mio server. Qualcuno sa come farlo?Come ottenere l'indirizzo IP di boost :: asio :: ip :: tcp :: socket?
46
A
risposta
67
Il socket ha una funzione che recupera l'endpoint remoto. Mi piacerebbe dare a questo (a lungo ish) catena di comandi un andare, si dovrebbe recuperare la rappresentazione di stringa dell'indirizzo IP estremità remota:
asio::ip::tcp::socket socket(io_service);
// Do all your accepting and other stuff here.
asio::ip::tcp::endpoint remote_ep = socket.remote_endpoint();
asio::ip::address remote_ad = remote_ep.address();
std::string s = remote_ad.to_string();
o la versione one-liner:
asio::ip::tcp::socket socket(io_service);
// Do all your accepting and other stuff here.
std::string s = socket.remote_endpoint().address().to_string();
21
o, ancora più semplice, con boost::lexical_cast
:
#include <boost/lexical_cast.hpp>
std::string s = boost::lexical_cast<std::string>(socket.remote_endpoint());
Problemi correlati
- 1. boost :: asio :: ip :: tcp :: socket è connesso?
- 2. connettersi su boost "connection less" :: asio :: ip :: udp :: socket
- 3. Come si dovrebbe abbattere un boost :: asio :: ip :: udp :: socket?
- 4. boost :: asio :: ip :: multicast :: join_group non funziona
- 5. Boost Asio Server sincrono TCP multithread
- 6. boost :: asio :: tcp :: socket Chiudi e annulla senza gestori chiamati
- 7. Boost Asio tcp :: eccezione di violazione dell'accesso dell'accettore
- 8. boost :: asio over SocketCAN
- 9. Client TCP/IP Objective-c
- 10. Java TCP/IP Socket ottimizzazione delle prestazioni in scrittura
- 11. Quale valore di `boost :: system :: error_code` deve essere fornito quando` boost :: asio :: ip :: tcp :: resolver :: resolve() `fallisce?
- 12. Boost :: Asio operazioni di lettura/scrittura
- 13. Comunicazione vocale su TCP/IP
- 14. Come spegnere correttamente il server asio tcp?
- 15. Come ottenere l'indirizzo IP di un endpoint socket remoto
- 16. Qual è la differenza tra trasmissione sincrona e asincrona nella programmazione socket TCP/IP?
- 17. Connessione socket tramite indirizzo IP secondario
- 18. Boost socket multicast su un'interfaccia ethernet specifica
- 19. come trasformare boost :: socket asio in socket C++/CLI .Net?
- 20. boost :: broadcasting ASIO UDP
- 21. Come stabilire una connessione TCP/IP abilitata SSL in Ruby
- 22. Come ottenere l'indirizzo IP?
- 23. Boost asio socket tcp disponibile segnala il numero errato di byte
- 24. Determinazione dell'indirizzo IP e della porta di una connessione TCP/IP in entrata in Erlang
- 25. Come ottenere il proprio indirizzo IP con un indirizzo socket?
- 26. Prestazioni di IPX/SPX e TCP/IP
- 27. Boost Asio message_flags
- 28. Come si interrompe una connessione TCP/IP arbitraria su Linux?
- 29. Certificati SSL e Boost asio
- 30. Impossibile rilevare l'eccezione da boost :: asio :: io_service :: eseguire
Grazie per la risposta, ho capito la catena può essere scritta semplicemente come:.. socket.remote_endpoint() indirizzo() to_string() – kyku
Sì, è così che avrei fatto (supponendo che non ci fossero possibilità di null o errori nei punti intermedi). L'ho lasciato ampliato a scopo esplicativo. A mio parere, la versione one-liner è migliore (mi piace il mio codice relativamente compatto, quindi posso vederne di più su uno schermo). – paxdiablo