每个TcpCLient都有新的线程-或者是什么方法可以获得100多个客户端

本文关键字:方法 客户端 是什么 或者是 TcpCLient 或者 线程 每个 | 更新日期: 2024-09-25 12:30:57

我编写WPF应用程序。什么是应用程序做它的-只需从gps跟踪器听数据。

问题是——我不知道如何处理100多台设备。我的意思是-现在我确实喜欢:

 {
    var serviceIP = System.Configuration.ConfigurationManager.AppSettings.Get("sericeIP");
    var servicePort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings.Get("sericePort"));
    var dispatcher = Dispatcher.CurrentDispatcher;
    IPAddress localAddr = IPAddress.Parse(serviceIP);
    _client = new TcpListener(localAddr, servicePort);
    _client.Start();
    new Thread(() =>
    {
        while (true)
        {
            TcpClient tcpClient = _client.AcceptTcpClient();
            new Thread(() => AcceptClient(tcpClient, dispatcher)).Start();
        }
    });
}
private void AcceptClient(TcpClient client, Dispatcher dispatcher)
{
    client.ReceiveTimeout = 13000;
    while (client.Connected)
    {
        try
        {
            NetworkStream nwStream = client.GetStream();
            byte[] buffer = new byte[client.ReceiveBufferSize];
            int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);
            string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            // My logic
        }
        catch (Exception ex)
        {  }
    }
}

对于1台设备来说还可以,但现在我认为100-500-1000台设备会是什么样子。。。。。。。。。1000线程将杀死机器-所以我不知道什么方法更适合监听大量设备

每个TcpCLient都有新的线程-或者是什么方法可以获得100多个客户端

您需要使用异步编程。有几篇文章可以帮助你做到这一点。MSDN举了一个例子。使用async,您不需要自己分配线程。NET负责处理这一问题。当操作系统等待IO操作时,所有线程都会被释放。因此,可以处理连接的线程数量要少得多。

如果您要从1000台设备接收数据,为什么要在客户端应用程序中进行?当WPF应用程序关闭时,设备应该做什么?

在windows服务中接收信息并将信息存储在数据库中要好得多。通过这种方式,您还可以返回并分析所有收到的信息。