在過去一週,我們從零開始,成功地用 Swift 打造了一個精美的 iOS App,並與我們後端的 Python Agent 進行了完美的互動。然而,在看似順利的開發過程中,其實隱藏著一個每位開發者都可能遇到的「經典大魔王」—— 網路連線問題。
今天,我們不介紹新功能,而是要扮演一回「偵探」。我將分享在這次 App 開發中,我遇到的最關鍵的一個錯誤 "Could not connect to the server."
,並帶大家走一遍從發現問題、分析原因到最終解決的完整除錯流程。
這將是充滿實戰氣息的一天,讓我們開始吧!
Could not connect to the server
在 Day 25,當我興奮地將 App 的 UI 和 NetworkManager
串連起來,準備進行第一次真實 API 呼叫時,按下「發送」按鈕後,Xcode 的控制台中無情地噴出了一長串紅色錯誤訊息,核心指向了同一個問題:Could not connect to the server
(無法連線到伺服器)。
這意味著我的 Swift App,根本找不到運行在電腦上的 Python adk api_server
。
遇到連線問題,第一步永遠是檢查伺服器本身是否正常運行。我回到運行 adk api_server .
的終端機視窗,看到了以下日誌:
(venv) ➜ adk_mcp_Ithelp git:(main) ✗ adk api_server .
... (省略警告訊息) ...
INFO: Started server process [84450]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
日誌清楚地顯示,伺服器正在運行,並且監聽著 http://127.0.0.1:8000
。
這就奇怪了,既然伺服器沒問題,為什麼我的 App 會連不上呢?
127.0.0.1
的秘密問題的關鍵,就藏在 127.0.0.1
這個 IP 位址中。
127.0.0.1
又被稱為 localhost
或「本地回環位址 (Loopback Address)」。當我的 Python 伺服器綁定在 127.0.0.1
時,它意味著只有來自這台電腦內部的請求才能連接到它。
而我的 Swift App 是運行在 iPhone 模擬器或真實的 iPhone 上的。雖然它們和我的 Mac 在同一個 Wi-Fi 網路下,但對於作業系統來說,模擬器或 iPhone 是一個獨立的虛擬裝置,它們的請求是來自外部的,而不是來自 Mac「內部」。
這就是問題的癥結所在:伺服器把自己鎖在了「僅限內部訪問」的模式,自然就拒絕了來自 App 的連線請求!
help
指令既然預設的啟動方式不行,那麼 adk api_server
指令本身有沒有提供修改綁定 IP 的方法呢?這時候,就是 --help
參數登場的最佳時機。
我在終端機輸入:
adk api_server --help
在眾多選項中,我發現了關鍵的參數:
Options:
--host TEXT Optional. The binding host of the server [default:
127.0.0.1]
--host TEXT
這個選項,允許我們指定伺服器綁定的主機 IP,而它的預設值,正是 127.0.0.1
!
0.0.0.0
要讓伺服器能被區域網路內的其他裝置(比如我們的 iPhone)訪問,我們需要將它綁定到一個特殊的 IP 位址:0.0.0.0
。
0.0.0.0
代表「本機上的所有網路介面 (All Interfaces)」。當伺服器綁定到 0.0.0.0
時,它不僅會監聽 127.0.0.1
,還會監聽你電腦的有線網路 IP、Wi-Fi IP 等所有可用的 IP 位址。這就等於是把家裡的門打開,歡迎來自同一個 Wi-Fi 下的朋友來作客。
我停止舊的伺服器 (Ctrl + C
),並使用新的指令重新啟動:
adk api_server . --host 0.0.0.0
接著,將 Swift App 中 NetworkConfiguration.swift
的 host
,從 "http://localhost:8000"
修改為 "http://<你的電腦區域網路IP>:8000"
。
再次運行 App,按下發送——成功!錯誤消失了,Xcode 控制台成功印出了來自後端 Agent 的回應。
前端介面:
可以看到我們可以成功查詢並且運用 wazuh mcp server了!
後端:
可以看到成功被呼叫,狀態碼為200
前端 github repo 有興趣的可以 clone 來玩看看唷,裡面還是有許多的 bug
QWQ
https://github.com/Yulin494/ItHelpHomeIOSApp
今天,我們共同偵破了一起經典的網路連線懸案。這個過程雖然曲折,但收穫滿滿:
127.0.0.1
(localhost) 與 0.0.0.0
的區別和用途。
--help
參數來探索 CLI 工具的隱藏功能。
除錯是開發日常的一部分,每一次成功解決問題,都會讓我們對技術的理解更上一層樓。
我們的 App 現在已經功能完備且連線穩定。明天,我們將對這趟漫長而精彩的 30 天旅程進行一次全面的回顧,梳理我們從 MCP 理論到 n8n,再到 Python 與 Swift App 的所有知識點!