在 iOS 開發中單獨解析域名為 IP


1 為什么要自己解析?

典型場景說明
劫持/污染檢測比較 系統解析自建 DNS 的差異
QoS / CDN 選路對每個候選 IP 做 RT/丟包測速

系統 API(NSURLSession / Network.framework)在「真正建立連接之前」不會把解析結果暴露出來,因此需要主動解析一步。


2 API 選型概覽

API是否過時線程模型返回 IPv4/6備注
getaddrinfo?阻塞,需要自己放到隊列??POSIX,底層穩定
CFHost? iOS 15 標記為 DeprecatedRunLoop + 回調??僅維護舊代碼時可用
Network.framework (NWConnection)建立連接后才能拿到 endpoint僅在已連通后不適合「只解析」
SCNetworkReachability回調?只能拿到 是否可達,不給 IP

結論:2025 年仍推薦 getaddrinfo —— 標準、安全、跨平臺;若真要用 CFHost 必須接受棄用風險。


3 getaddrinfo —— 最硬核也最好用

3.1 Objective-C 同步示例

+ (NSArray<NSString *> *)pug_resolve:(NSString *)hosterror:(NSError **)error {struct addrinfo hints = {0}, *res = NULL;hints.ai_family   = AF_UNSPEC;      // 同時拿到 IPv4 + IPv6hints.ai_socktype = SOCK_STREAM;    // TCP/UDP 都行int gai = getaddrinfo(host.UTF8String, NULL, &hints, &res);if (gai != 0) {if (error) *error = [NSError errorWithDomain:NSPOSIXErrorDomaincode:gaiuserInfo:@{NSLocalizedDescriptionKey:@(

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84947.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84947.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84947.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

YOLOv1 技術詳解:正負樣本劃分與置信度設計

&#x1f50d; YOLOv1 技術詳解&#xff1a;正負樣本劃分與置信度設計 一、前言 YOLOv1 是目標檢測領域中具有劃時代意義的算法之一&#xff0c;它將檢測任務統一為一個回歸問題&#xff0c;實現了“You Only Look Once”的端到端實時檢測。其中&#xff0c;正負樣本的劃分機…

為 Nginx 配置 HTTPS(以 n8n 為例)完整教程【CentOS 7】

在部署如 n8n 這類自動化平臺時&#xff0c;為了保障數據傳輸安全&#xff0c;我們通常會使用 HTTPS 訪問。本文將以 n8n.example.com 為例&#xff0c;介紹如何在 CentOS 7 系統中通過 Nginx 為本地運行在端口 5678 的 n8n 服務配置免費 SSL 證書&#xff08;Let’s Encrypt&a…

Elasticsearch從安裝到實戰、kibana安裝以及自定義IK分詞器/集成整合SpringBoot詳細的教程ES(四)查詢、排序、分頁、高亮

基礎代碼 package com.test.xulk;import com.alibaba.fastjson.JSON; import com.test.xulk.es.esdoc.HotelDoc; import com.test.xulk.es.service.IHotelService; import org.apache.http.HttpHost; import org.elasticsearch.action.search.SearchRequest; import org.elast…

一個數組樣式上要分成兩個

如圖所示&#xff0c;要有一個區分來顯示&#xff0c;如果一開始就是這樣還可以有很多種處理方式&#xff0c;但是這個后期一直在調整所以不好重做因為開發已經完成&#xff0c;加上很多地方聯動改的地方太多&#xff0c;所以采用了一個比較笨的方法 <ul class"classif…

NLP進化史:從規則模板到思維鏈推理,七次范式革命全解析

“語言不是神的創造物&#xff0c;而是平凡人類的產物。”——諾姆喬姆斯基 自然語言處理&#xff08;NLP&#xff09;的發展史&#xff0c;就是人類試圖教會機器理解語言本質的探索史。本文將帶您穿越70年技術長河&#xff0c;揭示NLP領域關鍵的范式轉換里程碑。 一、規則驅動…

Yarn與NPM緩存存儲目錄遷移

Yarn與NPM緩存存儲目錄遷移 背景與需求 解釋Yarn和NPM緩存機制的作用及默認存儲路徑遷移緩存目錄的常見原因&#xff08;如磁盤空間不足、系統盤性能優化、多項目協作需求&#xff09; Yarn緩存目錄遷移方法 查看當前Yarn緩存目錄的命令&#xff1a;yarn cache dir修改Yarn…

Python爬蟲-批量爬取快手視頻并將視頻下載保存到本地

前言 本文是該專欄的第80篇,后面會持續分享python爬蟲干貨知識,記得關注。 本文筆者以快手為例子,基于Python爬蟲來實現批量采集視頻,并將視頻下載以及保存到本地。 而具體的“視頻采集以及視頻下載,保存”思路邏輯,筆者將在正文中結合“完整代碼”來詳細介紹每個步驟。…

org.springframework.cloud.openfeign 組件解釋

我們來詳細解釋一下 org.springframework.cloud.openfeign 這個組件。 一句話概括&#xff1a;它是一個聲明式的、模板化的HTTP客戶端&#xff0c;旨在讓微服務之間的REST API調用變得像調用本地方法一樣簡單。 為了讓你徹底理解&#xff0c;我會從以下幾個方面來解釋&#x…

2025年06月13日Github流行趨勢

項目名稱&#xff1a;awesome-llm-apps 項目地址url&#xff1a;https://github.com/Shubhamsaboo/awesome-llm-apps項目語言&#xff1a;Python歷史star數&#xff1a;37,536今日star數&#xff1a;1,287項目維護者&#xff1a;Shubhamsaboo, Madhuvod, libw0430, AndrewHoh, …

Go語言底層(五): 深入淺出Go語言的ants協程池

在 Go 語言中&#xff0c;goroutine 的輕量特性使得高并發編程變得異常簡單。然而&#xff0c;隨著并發量的增加&#xff0c;頻繁創建對象和無限制啟動 goroutine 也可能帶來內存浪費、GC 壓力和資源搶占等問題。為了解決這些隱患&#xff0c;協程池成為常用的優化手段。用于控…

React Native【實戰范例】網格導航 FlatList

import React from "react"; import {FlatList,Image,SafeAreaView,StyleSheet,Text,View, } from "react-native"; interface GridItem {id: string;title: string;imageUrl: string; } // 網格布局數據 const gridData Array.from({ length: 30 }, (_, …

KJY0047-J1階段測試

KJY0047 - J1階段測試題解 題目1&#xff1a;SYAP0001. 闖關 解題思路&#xff1a; 暴力思路&#xff1a;每次碰到奇數都使用一次 f o r for for 循環將后續的數值 1 1 1, 時間復雜度 O ( n 2 ) O(n^2) O(n2) 優化思路&#xff1a;可以用一個計數器 c n t cnt cnt 來存…

鍵盤按鍵枚舉 Key 說明文檔

鍵盤按鍵枚舉 Key 說明文檔 該文檔介紹了 Key 枚舉中定義的鍵盤按鍵常量及其對應編號&#xff0c;適用于標準 105 鍵的美式鍵盤布局。常用于瀏覽器或桌面端的鍵盤事件監聽、游戲開發、快捷鍵映射等場景。 electron-jest ?? 功能鍵&#xff08;Function Keys&#xff09; …

函數調用過程中的棧幀變化

int add(int a, int b) {int c a b;return c; }int main() {int result add(1, 2);return 0; }生成匯編代碼&#xff1a;g -S Cplus.cpp -o Cplus.s .file "Cplus.cpp".text.globl _Z3addii.def _Z3addii; .scl 2; .type 32; .endef.seh_proc _Z3addii _Z3addii:p…

【Java面試筆記:實戰】41、Java面試核心考點!AQS原理及應用生態全解析

引言:AQS在Java并發體系中的核心地位 AQS(AbstractQueuedSynchronizer)作為Java并發包的底層基石,是理解ReentrantLock、Semaphore等同步工具的關鍵。 在Java架構師面試中,AQS的原理與應用是高頻考點,掌握其核心機制對理解JUC包和構建高并發系統至關重要。 本文將從原…

碩士課題常用命令

ros常用命令&#xff1a; 1.環境變量刷新 source devel/setup.bash2.ROS_INFO的信息在終端顯示為亂碼或者問號&#xff0c;則在main函數中加入&#xff1a; setlocale(LC_ALL, "");3.刷新bashrc文件 source ~/.bashrcPX4 roslaunch px4 mavros_posix_sitl.launc…

2.6 激光雷達消息格式

新建終端&#xff0c;執行命令 roslaunch wpr_simulation wpb_simple.launch 在新建終端&#xff0c;執行命令 roslaunch wpr_simulation wpb_rviz.launch 顯示/Scan話題消息&#xff0c;后面的參數是noarr無數組&#xff0c;防止刷屏 rostopic echo /scan --noarr 參考官…

常見的網絡協議有哪些

1.應用層 1.1 HTTP/HTTPS 前端與服務器通信的基礎協議&#xff0c;用于傳輸 HTML、CSS、JS、圖片等資源。 1.2WebSocket&#xff08;如社交聊天、股票實時報價、視頻會議、在線教育等&#xff09; WebSocket協議建立在TCP協議之上&#xff0c;實現了瀏覽器與服務器之間的實時…

Prometheus + Grafana 監控 RabbitMQ 實踐指南

文章目錄 Prometheus Grafana 監控 RabbitMQ 實踐教程一、前言二、環境搭建2.1 環境準備2.2 安裝 Prometheus2.3 安裝 Grafana 三、集成 RabbitMQ Exporter3.1 下載 RabbitMQ Exporter3.2 解壓文件3.3 配置環境變量3.4 啟動 RabbitMQ Exporter3.6 驗證 Exporter 狀態 四、Prom…

Babylon.js場景加載器(Scene Loader)使用指南

在3D開發中&#xff0c;Babylon.js的場景加載器(Scene Loader)是加載各種3D模型格式的核心工具。本文將詳細介紹如何高效使用Scene Loader加載多種格式的3D模型文件。 一、基本概念與支持格式 要加載特定類型的文件&#xff0c;Babylon.js需要先注冊對應的文件類型插件。目前…