Indy TIdTCPClient 在網路掉線時的處理方法
自己做 TCP 的操作,客戶端採用 TIdTCPClient 用起來比較簡單。經過測試,這個控制元件也比較穩定。Indy 的控制元件都是阻塞模式。阻塞模式下,程式碼比較簡單,不容易出現麵條程式碼。
假設 TCP 連線已經建立,正常操作中,網路掉線了,可能過一段時間,網路又恢復了。比如拔掉網線這種情況。
經過測試,發現以下狀況。以下描述的情況,在主執行緒中操作,和線上程中操作,結果一樣。
在剛掉線的在幾秒之內,傳送資料不會出異常。看起來就是傳送成功了(實際上肯定沒發出去,網路已經掉了)。此時,檢查其 Connected 屬性,也正常,返回 True。
一段時間後,再次傳送資料,會出現異常。此時檢查 Connected 屬性,也會出現異常。但這種情況下,IdTCPClient 不會自己掉線。此時就算網路恢復正常,它還是一直異常下去。
集中情況:1. 沒有建立連線;2. 已經建立連線;3. 已經建立連線但網路掉了,傳送資料或讀 Connected 屬性已經異常了。上述3鍾情況下,呼叫其 Disconnect 方法,都不會異常。
在第三種情況下,要想恢復,呼叫 Disconnect 方法,這時候檢測 Connected 屬性,不會異常,會返回 False。如果網路通了,這時候執行 Connect 會成功,連線重新建立。
因此,最簡單的做法是用 try...except...end 在 except 中執行 IdTCPClient.Disconnect 方法。
如果程式比較複雜,層次比較深,except 這裡最好 raise 再次把異常丟擲。這樣程式讀寫資料的地方,無需知道讀寫是否成功,異常則自然會中斷程式的執行。
相關推薦
Indy TIdTCPClient 在網路掉線時的處理方法
自己做 TCP 的操作,客戶端採用 TIdTCPClient 用起來比較簡單。經過測試,這個控制元件也比較穩定。Indy 的控制元件都是阻塞模式。阻塞模式下,程式碼比較簡單,不容易出現麵條程式碼。 假設 TCP 連線已經建立,正常操作中,網路掉線了,可能過一段時間,網路又恢
Activity被回收掉之後的網路請求回撥處理方法詳解
想起寫這麼一篇博文的前提是上週去面試了一家公司,其中有這麼一個問題印象深刻,結合當時在網上看到的解決辦法我就說了一個錯誤答案,結果當場就被面試官給指出了錯誤,所以回來後和我的領導一起討論了這麼一個問題,他提出了一個很好地解決思路,於是乎我便寫了這麼一段程式
Cisco 1131AP掉線問題處理
註冊、1131、WLC、CISCO前幾天用戶打來電話說是行政樓的無線網絡不好用了,所有AP都亮紅燈!很奇怪,因為前一天使用都正常,怎麽全部都不好用了呢?趕到用戶現場登錄WLC,發現WLC上了少了很多AP,而這些AP都是1131的,其它的型號的1142、1602都工作正常,難道真的都壞了?查看WLC日誌,看到日
360wifi: 手機鎖屏360wifi掉線的解決方法
clas tex 有關 技術 img 安全性 content 出現 list 如遇到iphone鎖屏斷網的情況,按照以下操作步驟可以解決一部分用戶的問題 (該問題並不是360WifFi問題,與蘋果機制有關)如有安卓手機掉線,請確保手機連接其他Wifi並不會掉線,然後嘗試粉色
用技術解決困惑:解決校園網掉線時自動重啟問題
解決校園網掉線時自動重啟問題 在學校常常會遇到校園網狗血般經常性斷網,斷網原因多種多樣,有些是校園網技術落後,負載太多時故障性掉線,有些則是檢測到開啟wifi而主動掉線。 一、如何解決校園網斷網後自動重新啟動,並且重新開啟wifi? 以下為題主的解決方
【經驗】ADB掉線的解決方法
1、殺掉adb adb kill-server // 殺掉adb 若“adb kill-server”執行成功,重新啟動adb即可 adb start-server // 啟動adb
vue+element+axios全域性loading增加target標籤時處理方法
問題: 在axios的攔截器中配置全域性loading時。如果加上target屬性時。呼叫close方法關閉loading時。close方法將失效原因: 加上target標籤時候loading將不是一個單例。解決方式:let loadinginstance, lo
Putty連阿里雲CentOS7.3伺服器總是掉線的解決方法
申請了阿里雲的伺服器,CentOS7.3的系統,經常出現一會就掉線,需要從新登入才行。找到如下解決方案,實驗下是否可行。 1. echo ¥TMOUT 如果顯示空白,表示沒有設定,等於使用預設值0, 一般情況下應該是不超時。如果大於0,可以在如/etc/profile之類檔
ubuntu14.04.1LTS 無線網絡卡rtl8192cu掉線問題解決方法
ubuntu用了有半年了,臺式電腦在網上買了個usb無線網絡卡, win7系統支援良好,ubuntu總是過一段時間就自動掉線,以下是解決方法: 1. 首先,確定無線網絡卡的型號:我的無線網絡卡型號為 RTL8192CU。 2. 編譯生成8192cu.ko驅動模組 sudo
jvm出現OutOfMemoryError時處理方法/jvm原理和優化參考
The heap stores all of the objects created by your java program.The heap's contents is monitored by the garbage collector,which frees me
模擬器除錯“掉線”問題解決方法
在使用模擬器除錯過程中,有時候會發現,模擬器“掉線”了。 在Eclipse的DDMS下看不到device裝置了 使用adb devices命令也不能顯示,或者是device offline狀態 在Eclipse裡邊直接執行自己的Android程式提示如下 [2011-03-16 16:26:30 -
基於TCP的socket程式設計網路掉線重連
基於TCP的socket程式設計 sockets(套接字)程式設計有三種,流式套接字(SOCK_STREAM),資料報套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基於TCP的socket程式設計是採用的流式套接字。 正在裝載資料… 在這個程式中,
[Xcode10 實際操作]八、網路與多執行緒-(18)PerformSelector訊息處理方法:由執行時系統,負責去呼叫物件的指定方法
本文將演示PerformSelector訊息處理方法。在專案資料夾上點選滑鼠右鍵彈出檔案選單。【New File】->【Swift File】->【Next】->【Save As】:iOSApp.swift->【Create】現在開始編寫程式碼,建立Swift類【iOSApp.swif
1、connect方法會阻塞,請問有什麼方法可以避免其長時間阻塞? 答:最通常的方法最有效的是加定時器;也可以採用非阻塞模式。 2、網路中,如果客戶端突然掉線或者重啟,伺服器端怎麼樣才能立刻知道? 答
3.在子網 />答: 簡: 30表示的是網路號(network number)是30位,剩下2位中11是廣播(broadcast)地址,00是multicast地址,只有01和10可以作為host address。 詳: />代表的子網的網路號是30位,即網路號是 & =,此子網的地址空間
MySQL中sleep線程過多的處理方法
rec 連接超時 服務 一行 client out char* mysql連接 測試 先說具體方法: 先在MySQL中操作 set global wait_timeout = 60; set global interactive_timeout = 60; 然後在配置
[總結]Perl在遇到Unicode字符文件名時的各種處理方法
ref 路徑 進行 foreach quest error 對象 odi base 環境 XP/WIN7 Perl v5.16 編輯整理:523066680 常見的那些文件操作函數都不支持,於是為了達到目的,需要各種方法配合,應該是不如其他語言方便。 我只是想看
JSON後臺處理特殊字符方法,在JSONArray.fromObject轉換時處理
替換 ces return class 雙引號 string sonar substring log /** * 替換一個字符串中的某些指定字符 * @param strData String 原始字符串 * @param regex String 要替換的字符串 * @
文本溢出顯示省略號,CSS未加載時a標簽仍可用處理方法
結合 on() 模型 多行 方案 ott bold -o 範圍 一、文本溢出打點 (1)單行文本 overflow: hidden; text-overflow:ellipsis; white-space: nowrap; (2)多行文本 overflow : hid
Cuda中當數組數大於線程數的處理方法
tde emc -c com -i str delet different target 參考stackoverflow一篇帖子的處理方法:https://stackoverflow.com/questions/26913683/different-way-to-index
使用BeautifulSoup讀取網頁時發生錯誤的處理方法
剛開始學習BeautifulSoup在讀取網頁後解析網頁內容時發生錯誤,先上一段執行程式碼: #!/usr/bin/python # -*- coding: UTF-8 -*- from bs4 import BeautifulSoup from urllib2 import urlopen