首页 > 解决方案 > 每当客户端将完整的对象发送到 C# 中的服务器时,如何获得通知?

问题描述

我正在寻找一种更好的方法来在 c# 中创建一个简单的服务器

我已经创建了一个并且工作正常,但是它消耗了大量的 cpu,我正在寻找一种更好的方法来优化它

我写了以下内容:

    class server
    {
        Task[] Clients=new Task[5];
        int counter=0;
        public void open(IPAddress addr,int port){

            TcpListener listener =new TcpListener(addr,port);
            listener.Start();

            while (true)
            {
                TcpClient client =listener.AcceptTcpClient();
                Clients[counter] = new Task(()=>handle_client_connection(client));
                Clients[counter].Start();
                counter++;   
            }
        }

        public void handle_client_connection(TcpClient client){
            System.Console.WriteLine("accpeted a new request");
            NetworkStream stream=client.GetStream();
            while(true){
            if(stream.CanRead){
            StreamReader reader =new StreamReader(stream);    
            string s=reader.ReadLine();     

            if(s != null){   
             System.Console.WriteLine("message recieved :"+s);
            }
            }
           }
        }

    }

方法内部的while循环handle_client_connecion()是最困扰我的我想知道是否有办法知道客户端是否已将任何数据发送到网络流并在他这样做时得到通知

客户端不断序列化一个简单的对象并string多次发送,我不知道客户端发送消息的时间,我不想陷入while循环并继续检查它是否为空缓冲区或不,我也担心如果我最终只阅读了客户的一半信息,请帮忙!

标签: c#networking.net-coreservernetworkstream

解决方案


推荐阅读