iOS獲取個(gè)人熱點(diǎn)連接狀態(tài)

先附上原文鏈接 最近公司項(xiàng)目用到了個(gè)人熱點(diǎn),網(wǎng)上找了一篇文章感覺不錯(cuò)分享給大家~~

強(qiáng)調(diào)一下,個(gè)人熱點(diǎn)只有在有設(shè)備連接的時(shí)候才會(huì)生成bridge100的IP地址段,所以用戶只是把個(gè)人熱點(diǎn)的按鈕打開沒有設(shè)備連接的話是無法判斷個(gè)人熱點(diǎn)是否打開,而且我試了很多設(shè)備只有bridge100的熱點(diǎn),沒有發(fā)現(xiàn)bridge0的。

先看代碼

+ (NSString *)getIPAddress
{
    NSString *address = @"error";
    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;
    int success = 0;
    
    // retrieve the current interfaces - returns 0 on success
    success = getifaddrs(&interfaces);
    if (success == 0) {
        // Loop through linked list of interfaces
        temp_addr = interfaces;
        while (temp_addr != NULL) {
            if( temp_addr->ifa_addr->sa_family == AF_INET || temp_addr->ifa_addr->sa_family == AF_INET6) {
                // Check if interface is en0 which is the wifi connection on the iPhone
                if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"bridge100"]
                    ) {
                    // Get NSString from C String
                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                }else if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                }
            }
            
            temp_addr = temp_addr->ifa_next;
        }
    }
    
    // Free memory
    freeifaddrs(interfaces);
    
    return address;
}

遍歷iOS所有(實(shí)體/虛擬)網(wǎng)卡,可以找到對(duì)應(yīng)的IP地址,A 設(shè)備開啟個(gè)人熱點(diǎn) B 設(shè)備連接A 設(shè)備的熱點(diǎn),這樣可以通過UDP實(shí)現(xiàn)兩個(gè)設(shè)備之間的通訊。
先介紹相關(guān)函數(shù)的參數(shù)

getifaddrs() 需要傳一個(gè)ifaddrs類型的結(jié)構(gòu)體地址獲取本地網(wǎng)絡(luò)接口信息,將之存儲(chǔ)于鏈表中,鏈表頭結(jié)點(diǎn)指針存儲(chǔ)于__ifap中帶回,函數(shù)執(zhí)行成功返回0,失敗返回-1。
ifa_next指向鏈表的下一個(gè)成員
ifa_name是接口名稱,以0結(jié)尾的字符串,比如eth0,lo0;

ifa_name IP段 IP地址
lo0 本地IP 127.0.0.1
en0 局域網(wǎng)IP 192.168.1.23
pdp_ip0 WWAN地址 --
bridge100 橋接、熱點(diǎn)IP 172.20.10.1

ifa_flags是接口的標(biāo)識(shí)位(比如當(dāng)IFF_BROADCAST或IFF_POINTOPOINT設(shè)置到此標(biāo)識(shí)位時(shí),影響聯(lián)合體變量ifu_broadaddr存儲(chǔ)廣播地址或ifu_dstaddr記錄點(diǎn)對(duì)點(diǎn)地址);
ifa_addr存儲(chǔ)該接口的IP地址;
ifa_netmask存儲(chǔ)該接口的子網(wǎng)掩碼;
ifa_dstaddr點(diǎn)對(duì)點(diǎn)地址;
ifa_data存儲(chǔ)了該接口協(xié)議族的特殊信息,它通常是NULL(一般不關(guān)注它);
AF_INET是家庭地址處于UDP或TCP的狀態(tài)AF_INET6適配ipv6;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容