C# socket通信receive接受到0导致CPU占用过高,有什么办法可以解决?

 我来答
鎻杺9V
2018-10-22 · TA获得超过1761个赞
知道大有可为答主
回答量:3673
采纳率:44%
帮助的人:221万
展开全部
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) }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式