C# udpclient 發送數據斷網后自動連接的方法


需求

有一個winform程序,

用來調試路由器和對路由器吞吐量進行測試

需要后台不斷的接收來自udp服務器端的數據,同時要發送數據到服務器端(無線路由器)

設計時候,通過一個線程,for(;;)死循環來接收數據,

另一個通過界面按鈕發送相關指令(實際情況是

正常流程,沒有任何問題.

但是

該流程中,有一個步驟是winform通過http協議上傳固件到路由器,

等待路由器重啟完畢,

正常流程,是沒有任何問題.

但是客戶環境,尤其重啟期間,測試PC機因為找不到ap接入點,會去介入其它ap,有可能不是同一網段,導致網絡環境已經變更.

此時,udp無法發送,也無法接收.

發送端可以通過udp重連設置.接收端使用的發送端的udp靜態對象,但依然無法接收.

無論.NET提供的socket還是updclient封裝udp,都無法很好的處理這種情況.

因此,解決思路就是

通過一個信號量

ManualResetEvent event_ok = new ManualResetEvent(false);
ManualResetEvent event_th = new ManualResetEvent(false);

ok的信號量是用來測試路由器是否通順,不通過ping的原因是因為非測試路由器也可以ping通.

每次發送后,等待路由器返回ok的指令,如果沒有收到指令,等待信號量超時.

則認為網絡中斷

設置線程同步變量為false

接收線程當同步變量為false時候,設置th信號量,

則發送端線程等待線程終止信號量后重新開啟接收線程,再次發送即可.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM