का उपयोग कर स्थानीय आईपी पता प्राप्त करें मैं वर्तमान में स्थानीय आईपी पते प्राप्त करने का एक पोर्टेबल तरीका खोज रहा हूं। क्योंकि मैं बूस्ट का उपयोग कर रहा हूं वैसे भी मैंने सोचा कि इस कार्य के लिए Boost.Asio का उपयोग करना एक अच्छा विचार होगा।Boost.Asio
नेट पर कई उदाहरण हैं जो चाल चलाना चाहिए। उदाहरण:
Official Boost.Asio Documentation
मैं सिर्फ मामूली परिवर्तनों के साथ दोनों कोड की कोशिश की। Boost.Doc पर कोड को "www.boost.org" लेकिन "localhost" या इसके बजाय मेरा होस्टनाम हल करने के लिए बदला गया था। होस्टनाम प्राप्त करने के लिए मैंने boost :: asio :: ip :: host_name() का उपयोग किया या इसे स्ट्रिंग के रूप में सीधे टाइप किया।
इसके अतिरिक्त मैंने अपना स्वयं का कोड लिखा जो ऊपर दिए गए उदाहरणों और मेरे (छोटे) ज्ञान को बूस्ट दस्तावेज़ीकरण और अन्य उदाहरणों से एकत्रित किया गया था।
सभी स्रोतों काम किया, लेकिन वे सिर्फ निम्न IP वापस किया:
127.0.1.1
मैं चलाने (यह गलत वर्तनी, अंत में अपने .1.1 नहीं है) और जीसीसी 4.4 के साथ Ubuntu 9.10 पर कोड संकलित .1
एक सहयोगी ने उसकी मशीन पर एक ही कोड की कोशिश की और
127.0.0.2 मिला (नहीं लिखने में कोई त्रुटि भी ...)
वह संकलित और जीसीसी 4.4.1 के साथ Suse 11.0 पर चलने (मैं नहीं कर रहा हूँ 100% सुनिश्चित)
मुझे नहीं पता कि स्थानीयहोस्ट को बदलना संभव है (1 27.0.0.1), लेकिन मुझे पता है कि न तो मुझे या मेरे सहयोगी ने ऐसा किया था। ifconfig का कहना है कि लूपबैक 127.0.0.1 का उपयोग करता है। ifconfig को भी सार्वजनिक आईपी मिलती है जो मैं खोज रहा हूं (141.200.182.30 मेरे मामले में, सबनेट 255.255.0.0 है)
तो क्या यह एक लिनक्स-मुद्दा है और कोड पोर्टेबल नहीं है जैसा मैंने सोचा था? क्या मुझे कुछ और बदलना है या बूस्ट है। एसीओ मेरी समस्या के समाधान के रूप में काम नहीं कर रहा है?
मुझे पता है कि Stackoverflow और अन्य पृष्ठों पर समान विषयों के बारे में ज्यादा सवाल कर रहे हैं, लेकिन मैं जानकारी जो मेरे मामले में उपयोगी है नहीं मिल रहा। अगर आपको उपयोगी लिंक मिलते हैं, तो यह अच्छा होगा अगर आप मुझे इंगित कर सकें।
पुनश्च: यदि आप अपने/etc/hosts फ़ाइल संपादित करते हैं (यह है * nix केवल, खिड़कियों के लिए भी काम कर सकते हैं
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(boost::asio::ip::host_name(), "");
tcp::resolver::iterator iter = resolver.resolve(query);
tcp::resolver::iterator end; // End marker.
while (iter != end)
{
tcp::endpoint ep = *iter++;
std::cout << ep << std::endl;
}
AFAIK, ASIO आपकी मशीन का इंटरफेस है, जो (लिनक्स या विंडोज पर GetAdaptersAddresses पर SIOCGIFCONF ioctl) की गणना करने के लिए एक रास्ता प्रदान नहीं करता है, ऐसा लगता है, क्या आप के बाद कर रहे हैं। कोड आपको बताएंगे कि आपकी मशीन का होस्ट नाम है, जो एक ही बात नहीं है, और के रूप में यह अपने नेटवर्क के विन्यास पर अधिक निर्भर है कम मजबूत है साथ DNS प्रश्नों (विशेष रूप से, डीएनएस "पता" के लिए आपकी मशीन का नाम है)। –
क्या asio :: ip :: address_v4 :: loopback() आपकी आवश्यकताओं को पूरा करता है? इस संकेत के लिए – yanpas