首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# TCP Socket 程式設計(二):Connection 執行緒、資料接收與連線管理

     編輯:關於C語言

Listener 接受連線後建立 Connection 執行緒


Connection gpsCn = new Connection(connection);
Thread thread = new Thread(new ThreadStart(gpsCn.WaitForSendData));
thread.Name = connection.RemoteEndPoint.ToString();
thread.Start();

Connection 類別封裝 Socket 並提供 WaitForSendData 方法,解決 ThreadStart 無參數限制。

Connection 接收資料迴圈

while (true)
{
    byte[] bytes = new byte[1024];
    string data = "";
    int bytesRec = _connection.Receive(bytes); // 阻塞等待資料
    _lastConnectTime = DateTime.Now;
    if (bytesRec == 0) { Logger.Log("Close", _connection.RemoteEndPoint.ToString()); break; }
    data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
    // 處理 data ...
}

關鍵點

  • Receive 同步阻塞,無資料不返回。
  • 接收位元組需轉字串(指定編碼)。
  • bytesRec == 0 表示對方關閉連線。
  • 大訊息需迴圈累加直到完整。

連線管理:Hashtable 存儲 Connection 與 Thread


// Listener 靜態成員
static public Hashtable Connections = new Hashtable();

// 建立連線時存入
Connections[connection] = thread; // 或自訂 Key

// Connection 內更新最後活動時間
_lastConnectTime = DateTime.Now;

// WinForm 定期掃描 Hashtable,移除逾時連線
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved