C# udpclient 發送數據斷網後自動鏈接的方法

需求服務器

有一個winform程序,網絡

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

須要後臺不斷的接收來自udp服務器端的數據,同時要發送數據到服務器端(無線路由器)測試

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

另外一個經過界面按鈕發送相關指令(實際狀況是線程

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

可是調試

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

等待路由器重啓完畢,對象

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

可是客戶環境,尤爲重啓期間,測試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信號量,

則發送端線程等待線程終止信號量後從新開啓接收線程,再次發送便可.

相關文章
相關標籤/搜索