為什麼啟用了VirualBox網路或者插著學校網線(實際已斷網),網易雲音樂就無法識別斷網狀態?

只要打開虛擬機,斷網之後都沒辦法聽緩存的歌,必須要斷掉才可以聽。有時候寫代碼的時候想聽聽歌都不行。雲音樂的安卓工程師都不用雲音樂是嗎???還是我的問題???(還有學校的網斷了,只要網線還插著就識別不出來)(之前用的其他音樂軟體並沒有發現這種問題)

緩存的歌是指沒有下載的歌!!!

緩存的歌是指沒有下載的歌!!!

緩存的歌是指沒有下載的歌!!!

=============================

補充說明:

看到輪子哥的答案我還以為我冤枉雲音樂了呢。所以把市面上主流的音樂軟體全都下載了下來做測試。包括酷狗,蝦米,QQ,百度(原千千靜聽)。

網雲的問題是這樣的。

第一種情況:在網線介面還插在電腦上(學校裡面那種需要登錄的網路,網線還插著,但是實際上已經離線)開啟虛擬機

歌單頁面在不停載入。不管這個,直接點擊播放的話,沒有下載的音樂無法播放(特別讓人不悅的是,是雲音樂把每一首歌都試了下,發現不行再播放下一首,一直播放到一首下載了的歌為止,看起來就像中毒了一樣)。

第二種情況:拔掉網線開啟虛擬機

歌單可以顯示,但是沒有任何卵用。當你播放沒有下載的歌曲時,它會不停的載入。跟上面的情況不同,這種情況要經歷很久才會切下一首歌。

第三種情況:關閉虛擬機不拔網線

跟第一種情況相同。

第四種情況,也是正常的應該在上述所有情況中出現的結果。關閉虛擬機拔掉網線

這是正常網雲識別斷網的情況,無緩存的標黑,但你點擊無緩存音樂的時候,它無法播放。也不會在列表被隨機播放到。但是飄白的有緩存的歌就可以播放。(由於上面的歌都有緩存,所以我就截了下面的)

當然。如果這個技術難到其他公司都做不出來,那麼我們也不能怪雲音樂是吧???

所以我如開頭那樣下載了其他主流的音樂軟體。

四種情況輪流上。(如果你們要測試的話,修改之後要重啟軟體才可以)

原本我真的以為這些軟體至少有那麼一兩個在上述四種情況下有那麼一兩種識別不出來。

但是我!!太!!天!!!真!!!了!!!

結果是毫無疑問的,甚至讓我有點氣憤。所有主流播放軟體除了雲音樂都能輕易地識別這四種情況的斷網!!聽緩存的音樂完全沒有問題。

按照輪子哥的話,這些軟體除了雲音樂都很不簡單呢。。。。。。。。。。

其實我真的蠻奇怪的,網易雲音樂那麼多用戶,虛擬機這個可能不是人人用(或許程序員們愛用的mac和linux沒有這種情況???),但是有那麼多學生用戶,難道沒有一個人發現插著學校的網線,在斷網的情況下無法聽緩存的歌嗎????為什麼一直都沒有人問過這個問題???


這搞不好是網易網站的問題。

因為我電腦開啟了 Hyper-V 的虛擬網路的時候,用瀏覽器(不是客戶端)打開 http://music.163.com 居然會給我 Reset……把虛擬網路關掉就一切正常。我是在家裡接路由器。


啟用了VirtualBox網路,就相當於你連了中國電信的ADSL但是中國電信不讓你訪問別人,這樣你的網路顯然還是連上了的,只是網上沒人理你。普通軟體怎麼可能會識別這麼高端的情況。


其實還是流程比較智障的問題,網易做了主要依靠網路,需要在線統計播放的app,卻忘了有假network available這種情況,於是每次切歌都要嘗試連接好長時間,超時候才grace播放下一首歌,卻不會先進入離線模式grace播放所有歌曲,後台接著重試

此外檢測網路可用性的方法也太弱,查不出假network

解決辦法:帶個手機放歌


網易雲音樂好像也是套殼 Chromium 吧

和 Host-Only有問題,試試 NAT/Bridge?


直接找到本地緩存的文件或許能用,只是雲音樂和別家音樂檢測離線的方式不一樣,別家需要和伺服器tcp鏈接一下,來確定是否有網路連接,雲音樂這貨只檢查本地連接。


你可以禁用Host-Only連接,讓VirtualBox採用NAT或橋接模式的網路。


因為愚蠢的產品經理設計的是斷網可以用離線,但連接異常會拚命先聯網不能用離線。

我也不能理解這樣做的邏輯,不明白為何不能優先使用本地存儲。

手機版也這樣,蝦米似乎也這樣。


注意Host Only,這是將主機連向虛擬機的反向適配器,只是讓主機和虛擬機實現雙向網路訪問,但關鍵的是這個適配器似乎會提供給主機一個默認網關,猜測網易雲音樂是被這一點坑了。另外開啟這個適配器以後,紅警2的區域網聯機補丁也會受到干擾看不到網路中其他的人,儘管是以0.0.0.0為目標地址發送和接收數據包。

在VMware的虛擬網路適配器啟用時也遇到類似現象,個人看法是這類虛擬網路適配器干擾了Windows系統的網關規則和路由表,所以系統對於網路狀態的判別不準確。

題主如果處在先獲取IP後認證的環境下(比如WebPortal),系統是不能準確判斷出哪一條路由可以訪問網路的,即使手機也這樣。除此之外區域網里也可以有DNS, Web Server等等各種東西,重要的是IP地址的設置和類型規定完全不受法律限制,Intranet完全可以偽裝成一副Internet的樣子,就像CMCC巨型區域網和嘿嘿嘿一樣,就算關閉了到外面世界的出口網關或代理,你也不能說它就不能用了呀,要是操作系統太較真是不是會很崩潰。


我的電腦也啟動了virtubox的虛擬網卡,不過網易雲音樂可以照常使用。順便一提,版本是win10UWP


個人給出一個解決方案,只要網易雲音樂加上Captive Portal檢測機制就可以了。

(簡單說就是請求一個非加密HTTP網頁,如果結果與預期相同,即為連上了 Internet;如果結果與預期不同,即打開其他頁面,則被認為這是一個需要登錄的熱點;如果幹脆無法訪問網頁,則認為完全沒有互聯網連接。)


借鑒輪子哥答案里古春海的評論,我認為他的見解是正確的。

即除了網易雲音樂之外,其他音樂播放軟體,不管是在離線還是在線狀態,對已經有緩存的歌曲都直接播放緩存文件,因此不涉及軟體自己判斷目前處於online還是offline狀態,也就沒有輪子哥補充的DDOS攻擊自己伺服器的說法了。

網易雲音樂沒有這樣做,到底是低級失誤還是有其他功能設計上的考慮,這就不得而知了。


我記得網易雲音樂客戶端也是用的Web技術,所以無法檢測這種情況。其他應用都是本地程序,能識別有網路但無互聯網的情況。沒有解決辦法。


推薦閱讀:

HTC M8 也會出現雙底欄的現象,為什麼沒有人像批評 Smart Bar 一樣批評它?
如何理解Android 5.0浮動按鈕的陰影變化?
Push mail 的實現原理是什麼?
HTC Desire 816能帮HTC打赢这场中低端战役吗?
在身體上做一個二維碼紋身,能否實現信息讀取,所讀取信息能否在不改變紋身圖案的狀況下實現更新或改變?

TAG:虛擬機 | VirtualBox | Android | 網易雲音樂 |