在IM項目中,socket建立成功且進行發送socket成功後,切換網絡後會導致發送消息失敗!
經過多次測試得出規律:
1: 移動網絡環境建立的socket連接,那麼切換到wifi後,發送消息失敗;
2: wifi網絡環境建立的socket連接,那麼切換到4g後,發送消息失敗;
那麼,難道socket在某一網絡環境下建立的socket鏈路,那麼切換網絡後,還是使用原來的SOCKET鏈路嗎?
測試結果是符合這樣的,但是爲什麼其他IM 產品卻沒有表現出類似的情況呢?
經過N多搜查資料,還是沒有看到APPLE對IOS SOCKET 建立與網絡的說明。但是在stackoverflow上找到一個類似的問題情況,
最終決定,在切換網絡的時候,關閉鏈路,重新建立連接解決!
/*
* ==============================================================================
* 1: 網絡環境若從wifi切換到2g/3g/4g,那麼需要關閉AsynShutdown,然後重建立連接AsynConnect
* 2: 網絡環境若從2g/3g/4g切換到wifi,那麼需要關閉AsynShutdown,然後重建立連接AsynConnect.
* ==============================================================================
*/
PS:切換網絡(4g to wifi )後,需要重建立鏈接是正常的,因爲鏈路路由都不一樣了!
參考:
http://stackoverflow.com/questions/30480599/sometimes-socket-dies-when-switching-wifi-to-3g-ios-posix-sockets