recv函数接收数据
没办法,因为数据是未知大小的,使用recv函数接收数据时,可能收不完整,总不可能设置一个超大缓冲区吧?
所以,按照自己的想法改造了下,问题解决了,但又感觉无论是代码还是效率都很鸡肋,怎么办?
大大们帮忙看看吧。。。。。。。。。。。
//分块接收不定长数据
int BlockSize = 1,BufferSize = BlockSize; //块大小,初始缓冲区大小
int thisRecv = 0,allRecv = 0; //本次接收长度,总已接收长度
LPSTR Buffer = new CHAR[BlockSize]; //接收缓冲区
LPSTR Buffer_TempCpy=Buffer; //接收缓冲区的指针临时副本
while(true)
{
thisRecv=recv(s,Buffer+allRecv,BlockSize,0);
//相应处理
if(thisRecv<=0) //接收0长度或者出错
{
if(thisRecv==SOCKET_ERROR) //异常
{
Err();
delete[] Buffer;
return NULL;
}
//接收完成,哈
break;
}
else if (thisRecv<BlockSize) //一次没有接收完指定分块大小
{
BlockSize-=thisRecv;//为了继续接收剩余,藐视没有用?
}
allRecv+=thisRecv; //更新已接收长度
if (allRecv==BufferSize) //缓冲区存满了
{
//开辟更多空间,貌似会产生内存碎片?
Buffer=new CHAR[allRecv+BlockSize];
memcpy_s(Buffer,allRecv,Buffer_TempCpy,allRecv); //复制已接收数据
delete[] Buffer_TempCpy; //删除旧数据
BufferSize+=BlockSize; //更新缓冲区大小
Buffer_TempCpy=Buffer;
}
}
...全文
相关推荐
python网络编程调用recv函数完整接收数据的三种方法
本文主要介绍了python网络编程调用recv函数完整接收数据的三种方法。具有很好的参考价值,下面跟着小编一起来看下吧
关于recv函数在不知道接收数据大小时如何申请buffer
关于recv函数在不知道接收数据大小时如何申请buffer
socket_recv函数使用心得.
这是一份关于 socket_recv的文档,相信对想学习 socket_recv的同学一定有很大的帮助!
send函数 和recv函数
里面有socket函数和recv函数的详细讲解,有用
C语言中经socket接收数据的相关函数详解
主要介绍了C语言中经socket接收数据的相关函数详解,分别为recv()函数和recvfrom()函数以及recvmsg()函数的使用,需要的朋友可以参考下


