2
在Mac Os X中,當網絡連接狀態發生更改時,我的應用程序將如何得到通知?我嘗試使用SCNetworkConnection參考中的SCNetworkConnectionGetStatus。但它必須不斷被調用。我需要一個API,它會在網絡狀態變得很快時通知我。mac os中的網絡狀態更改通知x
在Mac Os X中,當網絡連接狀態發生更改時,我的應用程序將如何得到通知?我嘗試使用SCNetworkConnection參考中的SCNetworkConnectionGetStatus。但它必須不斷被調用。我需要一個API,它會在網絡狀態變得很快時通知我。mac os中的網絡狀態更改通知x
這就是我最終使用的。一旦我有了這個腳本,我就把它放到一個基本的while循環中,並且瞧 - 網絡連接變化監控。
#!/bin/bash
set -o pipefail
configured_ip_addresses="$((ifconfig | \
grep -iEo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | \
grep -vi '127.0.0.1' | tr '\n' ' ') || echo NONE_CONFIGURED)"
externally_visible_ip_address="$(curl -m 1 ipinfo.io/ip 2>/dev/null || echo NO_CONNECTIVITY)"
computed_state="Actual: $externally_visible_ip_address, Configured: $configured_ip_addresses"
statefile="/tmp/net-watcher.state"
if [ -f $statefile ]; then
echo "$computed_state" > "${statefile}-new"
new_chksum="$(md5 "${statefile}-new" | awk '{print $NF}')"
existing_chksum="$(md5 "${statefile}" | awk '{print $NF}')"
if [[ "${new_chksum}" != "${existing_chksum}" ]]; then
mv "${statefile}-new" "${statefile}"
osascript -e "display notification \"$(cat $statefile)\" with title \"ALERT: Network Changed\""
else
rm "${statefile}-new"
fi
else
echo "$computed_state" > $statefile
fi
的
完全相同的副本[異步網絡接口的狀態檢查(http://stackoverflow.com/questions/7793657/asynchronous-network-interface-status-check) – 2012-02-20 07:11:14
我加入runloop和回調函數來得到連續狀態。我使用macosx示例中的簡單示例。我的程序正在運行,但沒有給出預期的結果。我認爲SCNetworkConnectionCopyUserPreferences函數存在問題。有人可以提供有關此功能的更多信息嗎? – Anup 2012-03-05 07:00:26
@ MahmoudAl-Qudsi上面的評論應該最終引導你[這個接受的類似問題的答案](http://stackoverflow.com/a/3597085/2264149)。你看了一下嗎?它使用SystemConfiguration框架和特殊版本的Reachability類。 – Valdimar 2016-05-17 00:06:20