2012-02-20 79 views
2

在Mac Os X中,當網絡連接狀態發生更改時,我的應用程序將如何得到通知?我嘗試使用SCNetworkConnection參考中的SCNetworkConnectionGetStatus。但它必須不斷被調用。我需要一個API,它會在網絡狀態變得很快時通知我。mac os中的網絡狀態更改通知x

+0

完全相同的副本[異步網絡接口的狀態檢查(http://stackoverflow.com/questions/7793657/asynchronous-network-interface-status-check) – 2012-02-20 07:11:14

+0

我加入runloop和回調函數來得到連續狀態。我使用macosx示例中的簡單示例。我的程序正在運行,但沒有給出預期的結果。我認爲SCNetworkConnectionCopyUserPreferences函數存在問題。有人可以提供有關此功能的更多信息嗎? – Anup 2012-03-05 07:00:26

+0

@ MahmoudAl-Qudsi上面的評論應該最終引導你[這個接受的類似問題的答案](http://stackoverflow.com/a/3597085/2264149)。你看了一下嗎?它使用SystemConfiguration框架和特殊版本的Reachability類。 – Valdimar 2016-05-17 00:06:20

回答

0

這就是我最終使用的。一旦我有了這個腳本,我就把它放到一個基本的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