socket通信中//Recv函数接受数据的大小,如何动态改变?

Oirrm 2014-08-18 03:45:55
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...全文
368 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2014-08-19
  • 打赏
  • 举报
回复
你可以固定一个大小,循环接收到来的数据即可。
阿源是少年 2014-08-19
  • 打赏
  • 举报
回复
楼主可以参考这里我写的,不知道是不是你所表达的http://bbs.csdn.net/topics/390864214
hurryboylqs 2014-08-18
  • 打赏
  • 举报
回复
TCP的recv是需要循环接受的,不保证一次接收就能完成所有数据的,TCP是流式的协议
阿呆_ 2014-08-18
  • 打赏
  • 举报
回复
楼主误会了吧。 recv()干的事只是将数据从socket的缓冲区复制到用户缓冲区而已。setsockopt(,SOL_SOCKET,SO_RCVBUF, 干的事是设置系统用于socket的缓冲区大小。因此你完全可以随你所想地“动态”去使用传进recv的内存块
Oirrm 2014-08-18
  • 打赏
  • 举报
回复
// 接收缓冲区 int nRecvBuf=32*1024;//设置为32K setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); 之后用recv函数接受数据参数,用什么来存数据呀???
引用 2 楼 SiGoYi 的回复:
setsockopt函数可以设置缓冲区的大小,具体的楼主可以自己查查。
xian_wwq 2014-08-18
  • 打赏
  • 举报
回复
lz问的是不是接收数据长度如何根据需要调整? 这个长度一般是在自定义包头中定义的,解析包头后就可以确定需要接收数据的长度。
笨笨仔 2014-08-18
  • 打赏
  • 举报
回复
socket工作在上层,收到的是底层的消息,其长度不会超出TCP包的大小,如果你的编程有针对,应该知道数据包的最大长度,收到后马上转存处理,为何还要动态改变?
SiGoYi 2014-08-18
  • 打赏
  • 举报
回复
setsockopt函数可以设置缓冲区的大小,具体的楼主可以自己查查。
阿呆_ 2014-08-18
  • 打赏
  • 举报
回复
没看懂究竟问的是什么。 好像没人规定recv传进去的buffer必须是静态数组的吧?既然这块buffer本来就可以动态分配,你还想怎么动态法?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧