基於TCP通訊的客戶端斷線重連

2022-01-11 22:30:44 字數 2547 閱讀 7252

**:

在cs程式中,斷線重連應該是乙個常見的功能。

此處的斷線重連主要指的是伺服器端因為某種故障,伺服器端程式或者系統進行了重新啟動,客戶端能夠自動探測到伺服器端掉線,並嘗試重新進行連線

本程式基於來自英國的開源c#通訊框架的networkcomms(2.3.1版本)

先看一下效果

初始狀態:

當伺服器端程式關閉後,客戶端會自動探測到,並在客戶端顯示相關資訊

然後,我們設定為每隔5秒重連一次,可以自定義設定重連的次數,比如說重連50次,如果還沒有重連成功,則放棄重連

然後我們重新啟動伺服器端,客戶端會顯示重連成功.

具體步驟如下:

需要修改幾處networkcomms2.3.1通訊框架中的**

第一步:修改connectioninfo類的noteconnectionshutdown方法

該方法原來是:

internal voidnoteconnectionshutdown()

view code

修改後為: 

private bool reconnectflag = false;

/// ///是否為重連線模式

///

public boolreconnectflag

set

}/// ///note this connection as shutdown

///

internal voidnoteconnectionshutdown()

}//新增狀態改變事件

public event eventhandlerstatechanged;

usingsystem;

usingsystem.collections.generic;

usingsystem.text;

usingnetworkcommsdotnet.tools;

namespacenetworkcommsdotnet

}public classstringeventargs : eventargs

public string text

} }

namespacesystem.runtime.compilerservices

}

相關**

第三步:在networkcomms靜態類中新增如下方法:

public static voidcleardic()

}

如果您使用的是v3版本,**稍微變化:

public static voidcleardic()

}

v3客戶端**:

usingsystem;

usingsystem.collections.generic;

usingsystem.componentmodel;

usingsystem.data;

usingsystem.drawing;

usingsystem.text;

usingsystem.windows.forms;

usingnetworkcommsdotnet;

usingdpsbase;

usingsystem.net;

usingsystem.threading;

//在窗體上顯示新資訊

void form_connectionstatusnotify(objectsender, stringeventargs e)

else

}private bool servernotifyclose = false;

public event eventhandlerconnectionstatusnotify;

void connnectioninfo_statechanged(objectsender, stringeventargs e)

catch(exception ex)}}

while (num }}

private void button1_click(objectsender, eventargs e)

//獲取水果相關資訊

private void button2_click(objectsender, eventargs e)

else

}private void form1_formclosing(objectsender, formclosingeventargs e)}}

客戶端**

伺服器端無需額外的設定。

Mina客戶端斷線重連

新建 實現mina的ioservicelistener介面 import org.apache.mina.core.service.ioservice import org.apache.mina.core.service.ioservicelistener import org.apache.mi...

metaq的客戶端自動斷線重連機制

1.metaq的資料傳輸基於gecko 3.remoteclient的連線語句如下 for int i 0 i conncount i catch final exception e 在連線建立時,會新建乙個定時任務,進行連線檢測,連線的 如下 override public void run ca...

C 使用TCPClient客戶端斷線重連伺服器

最近做模擬雷達推送資料的專案,用乙個軟體模擬幾百台雷達往後端推送資料,資料處理的 我就不貼了,主要是建立socket連線和斷線重連部分的 主要是針對服務端斷開連線後,客戶端這邊要重現伺服器。我是先從資料庫讀取資料,對資料封裝傳到後端,讀資料的時候用乙個list存放資料庫的雷達裝置名稱,根據裝置建立s...