我目前正在研究TCP多线程服务器和用C#编写的客户端。我在Google上四处寻找并尝试了超过5个示例,但似乎没有一个可以满足所有要求。由于我不熟悉网络,所以如果有人能指出我正确的方向,我们将不胜感激。
以下是我需要的要求:
实际上我发现的最接近的例子是: http://www.codeproject.com/Articles/22918/How-To-Use-the-SocketAsyncEventArgs-Class
但是我面临的问题是消息是在类Token中,我在我的Window Form Application中包含了所有这些类,这是我的主要应用程序。客户ID,客户端状态或对客户的操作等信息将在表单中执行。我不知道如何将这些变量从Token类带到我的表单。
这是另一个似乎适合我的目的的例子: http://www.codeproject.com/Articles/2866/Multi-threaded-NET-TCP-Server-Examples
但我不知道如何更改它,因为它阻止我的表格显示。
感谢您的帮助。
答案 0 :(得分:1)
几个月后......首先,你必须记住窗口形式不是异步本机,你必须实现调用方法来使用tcp AsyncCallback。在其他地方处理客户端,您必须创建一个新的字典,如:
Dictionary<string, System.Net.Sockets> clientList;
对于数据库ID,它可以是int,或者只是您可以使用本机系统句柄:
this.anonymousSock.Client.Handle
并像这样添加:
clientList.Add("ID", this.anonymousSock);
最终:
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 /内存刻录线程。