當網路速度不夠快時
若傳送方將資料傳送過後直接關闢socket close()
則會導致接收方,在還沒接收的時候,就偵測到socket關閉
而會有exception產生
所以在資料傳送完成後,只需要使用 flush()
2012年11月27日
判斷JAVA Socket斷線方法
使用isClosed()、isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等方法,只能得知本地段是否有主動斷線,若server端發稱異常斷線,則這些方法還是會回傳true。
上網查詢,只到了有人分享了一個方法
sendUrgentData,查看文檔後得知它會往輸出流發送一個字節的數據,只要對方Socket的SO_OOBINLINE屬性沒有打開,就會自動舍棄這個字節,而SO_OOBINLINE屬性默認情況下就是關閉的
下面一段代碼就可以判斷遠端是否斷開了連接:
上網查詢,只到了有人分享了一個方法
sendUrgentData,查看文檔後得知它會往輸出流發送一個字節的數據,只要對方Socket的SO_OOBINLINE屬性沒有打開,就會自動舍棄這個字節,而SO_OOBINLINE屬性默認情況下就是關閉的
下面一段代碼就可以判斷遠端是否斷開了連接:
try{
socket.sendUrgentData(0xFF);
}catch(Exception ex){
reconnect();
}
參考連結
2012年10月23日
Android 3.0 發生 android.os.NetworkOnMainThreadException
在作socket連線時,出現了這個錯誤訊息
網路上找到的資料解釋為
網路上找到的資料解釋為
是Android 3.0以上在網路的存取上增強的限制。
所以必須要onCreate()中加入底下的程式碼
測試過後即可解決問題
測試過後即可解決問題
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // or .detectAll() for all detectable problems .penaltyLog() .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .detectLeakedClosableObjects() .penaltyLog() .penaltyDeath() .build());
訂閱:
文章 (Atom)