程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#實現的多線程異步Socket數據包接收器框架(2)

C#實現的多線程異步Socket數據包接收器框架(2)

編輯:關於C語言

3.1  系統啟動

系統啟動方法StartReceiver()首先清理資源、創建數據庫連接、初始化若干計數值,然後創建服務器端偵聽Socket對象,最後調用靜態方法ThreadPool.QueueUserWorkItem()在線程池中創建3個核心處理線程。

/// <summary>
/// 啟動接收器
/// </summary>
public bool StartReceiver()
{
try
{
_stopReceiver = true;
this.Close();
if (!this.ConnectDatabase()) return false;
_clIEntCount = 0;
_datagramQueueCount = 0;
_datagramCount = 0;
_errorDatagramCount = 0;
_exceptionCount = 0;
_sessionTable = new Hashtable(_maxAllowClIEntCount);
_datagramQueue = new Queue<TDatagram>(_maxAllowDatagramQueueCount);
_stopReceiver = false; // 循環中均要該標志
if (!this.CreateReceiverSocket()) //建立服務器端 Socket 對象
{
return false;
}
// 偵聽客戶端連接請求線程, 使用委托推斷, 不建 CallBack 對象
if (!ThreadPool.QueueUserWorkItem(ListenClIEntRequest))
{
return false;
}
// 處理數據包隊列線程
if (!ThreadPool.QueueUserWorkItem(HandleDatagrams))
{
return false;
}
// 檢查客戶會話狀態, 長時間未通信則清除該對象
if (!ThreadPool.QueueUserWorkItem(CheckClIEntState))
{
return false;
}
_stopConnectRequest = false; // 啟動接收器,則自動允許連接
}
catch
{
this.OnReceiverException();
_stopReceiver = true;
}
return !_stopReceiver;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved