WebSocket接收完整消息

WebSocket接收完整消息

		//拓展方法(静态类中)
		public static async System.Threading.Tasks.Task<MsgInfo> ReceiveMsg(this System.Net.WebSockets.WebSocket ws, int Capacity = 1024 * 1024 * 1)
        {
            //容器,至多只能保存初始化大小的信息
            //Capacity必须大于0,否者代码在执行到这里,前端websocket会断开
            ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[Capacity]);
            //初始定义化消息结果类,主要是将result.EndOfMessage设为false
            WebSocketReceiveResult result = new WebSocketReceiveResult(0, WebSocketMessageType.Binary, false);
            //用于保存完整消息的所有片段
            List<byte[]> Message = new List<byte[]>();
            //消息未完全接收,用于接收完整的消息
            while (!result.EndOfMessage)
            {
                //接收消息
                result = await ws.ReceiveAsync(buffer, System.Threading.CancellationToken.None);
                Message.Add(buffer.Take(result.Count).ToArray());//保存消息片段
            }
            byte[] temp = new byte[0];//储存完整消息的容器
            Message.ForEach(u => temp = temp.Concat(u).ToArray());//将所有消息片段进行整合(提取实际数据)
            buffer = new ArraySegment<byte>(temp);//将完整消息保存到容器中(buffer)
            //MsgInfo,自写类
            return new MsgInfo() { Buffer = buffer, Result = result };
        }

希望对正在学习WebSocket的你有所帮助!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值