2 u011562740 u011562740 于 2016.03.01 14:12 提问

js客户端与c#的后台服务进行websocket通信。后台服务对于多帧接收的粘包等问题。

客户端网页是纯的javascript写的,后台服务是c#语言写的。
于是,用websocket通信的时候问题就来了,后台服务在接收客户端网页的多帧数据的时候,出现了粘包问题。
具体来说就是:
1、后台服务使用异步的
client.BeginReceive(RecvData, 0, RecvData.Length, SocketFlags.None,new AsyncCallback(AcceptCallBack), state);
来做接收;
2、接收的RecvData是byte[],其长度肯定够的;
3、接收过程中,有一次接收到的数据长度A,和将其当做一帧来解释得到的长度B(一帧的总长度)不一致。长度A比长度B大。

面对这种情况,个人是有代码上的处理办法。但是,如果另外还有丢包、失序的问题,那就没招了。

求各位大大提个解决思路

1个回答

devmiao
devmiao   Ds   Rxr 2016.03.08 12:59
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C#解决Socket丢包,段包,粘包算法
C#解决Socket丢包,段包,粘包算法: /// /// Socket 丢包,段包,粘包 算法 /// public class RequestHandler { private string temp = string.Empty; /// /// 处理Socket 丢包,段包,粘包 算法
Android Socket 发送与接收数据问题: 发送后的数据接收到总是粘包
先说明一下粘包的概念: 发送时是两个单独的包、两次发送,但接收时两个包连在一起被一次接收到。在以前 WinCE 下 Socket 编程,确实也要处理粘包的问题,没想到在 Android 下也遇到了。首先想从发送端能否避免这样的问题,例如: (1) 调用强制刷数据完成发送的函数;(2) 设置发送超时。1 先试了调用 flush() 函数,但运行后现象依旧2 设置发送超时是 Windows 平台的做法
c# Socket通讯中关于粘包,半包的处理,加分割符
using System; using System.Collections.Generic; using System.Text; using System.Net.Sockets; using System.Threading; namespace EventBase { /*解决Socket的粘包处理 使用方法 A2DTcpClient client =
Socket TCP/IP协议数据传输过程中的粘包和分包问题
1.通过图解法来描述一下分包和粘包,这样客户更清晰直观的了解: 下面对上面的图进行解释: 1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。 2.粘包情况:Socket Client发送的数据包,在客户端发送和服务器接收的情况下都有可能发送,因为客户端发送的数据都是发送的一个缓冲bu
C#高性能大容量SOCKET并发(五):粘包、分包、解包
使用TCP长连接就会引入粘包的问题,粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。粘包可能由发送方造成,也可能由接收方造成。TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据,造成多个数据包的粘连。如果接收进程不及时接收数据,已收到的数据就放在系统接收缓冲区,用户进程读取数据时就可能同时读到多个数据包。 粘包一般的解决办法是制定通讯协议,由协议来规定如何分包解包,因此在Scoket编程中需要定义分包、解包的逻辑。
C/C++ socket编程教程之九:TCP的粘包问题以及数据的无边界性
上节我们讲到了socket缓冲区和数据的传递过程,可以看到数据的接收和发送是无关的,read()/recv() 函数不管数据发送了多少次,都会尽可能多的接收数据。也就是说,read()/recv() 和 write()/send() 的执行次数可能不同。 例如,write()/send() 重复执行三次,每次都发送字符串"abc",那么目标机器上的 read()/recv() 可能分三次
TCP粘包问题分析和解决(全)
TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包
Js WebScoket与Java WebSocket的通信
不喜欢说废话,直接上代码←← 在myeclise里面新建一个项目,项目名命名为websocke,请使用java ee7.0或以上web环境。 1,在WebRoot下新建一个demo.html,其内容如下: html> head> style> #content{width:600px;height:200px;}
C#实现服务器数据实时推送的功能的原理
服务器自动推送信息的原理介绍
Socket通用TCP通信协议设计及实现(防止粘包,可移植,可靠)
我们接收Socket字节流数据一般都会定义一个数据包协议。我们每次开发一个软件的通信模块时,尽管具体的数据内容是不尽相同的,但是大体上的框架,以及常用的一些函数比如转码,校验等等都是相似甚至一样的。所以我感觉设计一个通用的通信协议,可以在之后的开发中进行移植实现高效率的开发是很有必要的。另外,本协议结合我自己所了解的通信知识尽可能的提升了可靠性和移植性,可处理类似粘包这样的问题。对于本文中可能存在的问题,欢迎各位大神多多指点。