Qt

2012-12-12 33 views
21

में स्थानीय आईपी पता प्राप्त करें क्या स्थानीय आईपी पते (यानी 192.168.1.49 जैसा दिखता है) Qt का उपयोग कर कंप्यूटर का कोई क्रॉस-प्लेटफ़ॉर्म तरीका है?Qt

मैं एक सिम्बियन फोन के लिए एक एफ़टीपी सर्वर बनाना चाहता हूं और मैं आईपी पते को एफ़टीपी क्लाइंट से कनेक्ट करना चाहता हूं।

उत्तर

32

उपयोग QNetworkInterface::allAddresses()

foreach (const QHostAddress &address, QNetworkInterface::allAddresses()) { 
    if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress(QHostAddress::LocalHost)) 
     qDebug() << address.toString(); 
} 
+5

+1: दुर्भाग्य से, यह भी आभासी मशीनों, आभासी बक्से, आदि के पते रिटर्न मैं अगर पिछले संख्या प्रतिसाद नहीं की जाँच करके एक त्वरित और गंदा ठीक उपयोग किया है ' टी 1 (आमतौर पर एक पलायन का आईपी) && address.toString()। सेक्शन ("।", - 1, -1)! = "1"। स्थानीय आईपी के पास मानक पलायन होने पर भी मैं अभी भी संभावना के लिए संभावना तलाश रहा हूं। –

12

QNetworkInterface::allAddresses() आप नेटवर्क पते दे देंगे। इसके बाद आप IPv4 पतों के लिए परिणाम है कि पतों लूपबैक नहीं कर रहे हैं फ़िल्टर कर सकते हैं: आप (सबनेट) की तरह सिर्फ IP पते की तुलना में अधिक जानकारी की आवश्यकता होती है

QList<QHostAddress> list = QNetworkInterface::allAddresses(); 

for(int nIter=0; nIter<list.count(); nIter++) 

    { 
     if(!list[nIter].isLoopback()) 
      if (list[nIter].protocol() == QAbstractSocket::IPv4Protocol) 
     qDebug() << list[nIter].toString(); 

    } 
5

, आप सभी इंटरफेस पर पुनरावृति करने के लिए है।

QList<QNetworkInterface> allInterfaces = QNetworkInterface::allInterfaces(); 
QNetworkInterface eth; 

foreach(eth, allInterfaces) { 
    QList<QNetworkAddressEntry> allEntries = eth.addressEntries(); 
    QNetworkAddressEntry entry; 
    foreach (entry, allEntries) { 
     qDebug() << entry.ip().toString() << "/" << entry.netmask().toString(); 
    } 
} 
1

मैं अपनी लक्ष्य मशीन का eth1 आईपी पता प्राप्त करना चाहता था। ऊपर दिए गए उत्तरों ने मुझे जो चाहिए था उसे प्राप्त करने में मेरी सहायता की: इस प्रकार मैंने नेटवर्क इंटरफ़ेस नाम eth1 का आईपी पता प्राप्त करने के लिए अपना कार्य लिखा।

QNetworkInterface eth1Ip = QNetworkInterface::interfaceFromName("eth1"); 
QList<QNetworkAddressEntry> entries = eth1Ip.addressEntries(); 
if (!entries.isEmpty()) { 
    QNetworkAddressEntry entry = entries.first(); 
    qDebug() << entry.ip(); 
} 
2

QNetworkInterface बहुत सारे पते लौटाता है। आप उन्हें फ़िल्टर चाहिए, प्राप्त करने के लिए वांछनीय परिणाम:

foreach (const QNetworkInterface &netInterface, QNetworkInterface::allInterfaces()) { 
    QNetworkInterface::InterfaceFlags flags = netInterface.flags(); 
    if((bool)(flags & QNetworkInterface::IsRunning) && !(bool)(flags & QNetworkInterface::IsLoopBack)){ 
     foreach (const QNetworkAddressEntry &address, netInterface.addressEntries()) { 
      if(address.ip().protocol() == QAbstractSocket::IPv4Protocol) 
       qDebug() << address.ip().toString(); 
     } 
    } 
}