C# socket通信receive接受到0导致CPU占用过高,有什么办法可以解决?
1个回答
展开全部
receiveFrom 方法 读取数据的时候 如果缓冲区不够大 则会分好几次读取。通过判断socket.Available 来判断上次读取的数据还有多少未读取。如果Available ==0则本次读取完毕 可以将接收方法封装在一个类中(SocketClient),实例化类后在单个线程中运行。 int recv; byte[] data; string receiveStr=""; while (true) { //如果发送的字节已经完毕。则重置接收字符串,休眠线程重新等待数据 if (mySocket.Available == 0) { //重置前首先尝试写个事件或委托将这次接收的receiveStr传递出去 OnDataReceived(receiveStr);//这个事件可以自己去补充 receiveStr=""; System.Threading.Thread.Sleep(1); continue; } int bufferSize =1024; data = new byte[1024];//接收数据到 int recv = mySocket.ReceiveFrom((data,ref Remote));//Remote 为EndPoint对象 将该批次数据保存在receiveStr中 receiveStr+=Encoding.ASCII.GetString(data,0,recv); } } //接收的类中 实例化上面的类并订阅 SocketClient xxx=new SocketClient(); //订阅接收事件 xxx.OnDataReceived+=new Hander(this.DataReceived); void DataReceived(string receive) { Console.WriteLine("接收到了收据:"+receive) }
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询