- 本人采用C# Socket 传输视频码流信息,涉及到多路视频一起发送,因此需要封装数据, 因为数据比较大粘包,半包现象严重,不能够显示画面,现在说下解决粘包半包的方法,这里只说服务器接收端接收方法:
private void receiveData(object state)
{
//send = new sendDada();
Socket clientSocket = state as Socket;
byte[] buffer = new byte[1024 * 1024 * 8]; //接收缓冲池
byte[] catchbuff = null; //缓存包数据
int lenght; //接收长度
try
{
//数据接收
while ((lenght = clientSocket.Receive(buffer)) > 0)
{
if (catchbuff == null)
{ //一个数据包开头
catchbuff = new byte[lenght]; //声明缓存包长度
Array.Copy(buffer,catchbuff,lenght ); //将缓冲池中数据复制到缓存中
}