2013-04-01 215 views
0

我目前的工作TCP多線程服務器,並用C#編寫的客戶端上。我環顧四周,嘗試了5個以上的例子,但似乎沒有一個能滿足所有要求。由於我對網絡不熟悉,因此如果有人能指出我正確的方向,我將不勝感激。C#TCP多線程的服務器和客戶端與需求

這裏有要求,我需要:

  1. 多線程,我需要能夠處理多個客戶端,但這些客戶並不需要相互通信的服務器。
  2. 連續操作,連接到服務器的客戶端後,他們需要不停地發送消息給對方,直到服務器丟棄所有的客戶端。服務器需要識別每個客戶端。通常,客戶端不需要自己斷開與服務器的連接。
  3. 斷開通知,其中大部分在谷歌發現沒有這個功能的例子,我需要的服務器,知道什麼時候該連接的客戶端斷開連接,以便服務器可以notifiy用戶。

其實我發現最近的例子是這樣的: http://www.codeproject.com/Articles/22918/How-To-Use-the-SocketAsyncEventArgs-Class

但我現在面臨的問題是,消息類令牌裏面,我包括在我的窗口窗體應用程序,這是所有這些類我的主要應用。客戶ID,客戶狀態或客戶操作等信息將在表單中執行。我不知道如何從Token類中將這些變量帶到我的表單中。

這是另一個例子似乎可以適合我的目的: http://www.codeproject.com/Articles/2866/Multi-threaded-NET-TCP-Server-Examples

但我不知道如何去改變它,因爲它擋住了我的表顯示從。

感謝您的幫助。

+0

那裏確實沒有問題。 –

+0

更新了我的問題 – AkariKamigishi

回答

1

幾個月後......首先,你必須記住,該窗口的形式是不是異步本地人,你必須實現調用方法爲使用TCP的AsyncCallback。在其他地方處理的客戶,你必須創建一個新的字典,如:

Dictionary<string, System.Net.Sockets> clientList; 

這可能是數據庫ID的情況下,int或乾脆你可以使用原生系統手柄:

this.anonymousSock.Client.Handle

而且加上他們是這樣的:

clientList.Add("ID", this.anonymousSock); 

Finaly:

public void Send(string data, string id) 
    { 
     Socket Client = this.clientList[id]; 
     byte[] byteData = Encoding.ASCII.GetBytes(data); 
     Client.BeginSend(byteData, 0, 
      byteData.Length, 0, 
      new AsyncCallback(SendCallback), Client); 
    } 

當接收,你可以在這種情況下,通過檢查你的插座條目,或通過使用令牌識別客戶端。

再沒有CPU /內存線程燃燒。