android tcp調(diào)試助手 TCP Socket中,有時候拔掉網(wǎng)線后依然能夠成功寫入數(shù)據(jù),如何快速的觸發(fā),發(fā)送異常?
TCP Socket中,有時候拔掉網(wǎng)線后依然能夠成功寫入數(shù)據(jù),如何快速的觸發(fā),發(fā)送異常?通常,客戶端連接到路由器,然后路由器的出口網(wǎng)線斷開。這種情況實際上是客戶機和服務器不能立即感知到它,或者不能立即
TCP Socket中,有時候拔掉網(wǎng)線后依然能夠成功寫入數(shù)據(jù),如何快速的觸發(fā),發(fā)送異常?
通常,客戶端連接到路由器,然后路由器的出口網(wǎng)線斷開。這種情況實際上是客戶機和服務器不能立即感知到它,或者不能立即確認它是否損壞。
因為路由器不會向客戶端或服務器發(fā)送任何信息。其實設計本身是合理的,否則:如果每次出口回路出現(xiàn)異常都通知上下游,也很麻煩。
解決方案:合理設計應用超時機制,不同的應用場景需要不同的超時時間。
例如,您可以仔細觀察IOS的微信登錄和消息發(fā)送。起初,我以為微信客戶端會監(jiān)控本地網(wǎng)絡事件,然后很快就會超時。后來,我試了好幾次才發(fā)現(xiàn)微信并不關(guān)心客戶端的網(wǎng)絡斷開事件(連IOS和Android都有這個事件)。在登錄過程中,即使關(guān)閉移動網(wǎng)絡和WiFi,登錄仍在進行中。發(fā)送消息時也是如此。即使移動網(wǎng)絡和WiFi完全關(guān)閉,微信也一直在嘗試發(fā)送信息。直到微信自身設置的超時時間過去,才會提示用戶發(fā)送失敗。微信的設計符合微信自身的場景,可以保證在頻繁的網(wǎng)絡切換過程中盡可能多的發(fā)送信息。