如何判断socket缓冲区是否有数据到达

Paradin 2009-03-11 09:35:36
recv/recvfrom函数,阻塞式,想写下面代码:

char buf[100];
AutoBuffer autoBuffer;

int len = 100
while (缓冲区还有数据)
{
int nBytes = recv(sockFrom, buf, 100, 0);
autoBuffer.Add(buf, nBytes);
}

怎样判断缓存区还有数据呢?msdn和网上还没找到。初学,谢谢了!
...全文
1844 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
seraphlone 2009-03-12
  • 打赏
  • 举报
回复
select是一个好办法
gamesuwei 2009-03-12
  • 打赏
  • 举报
回复
可以用select先去偷偷看下有没数据 如果有再去取
如这样:select(0, &recvfd, NULL, NULL, &buf);
gengzhiwei 2009-03-12
  • 打赏
  • 举报
回复
fd_set recvfd;
struct timeval tv = {3, 0};

FD_ZERO(&recvfd);
FD_SET(sockFrom, &recvfd);

//检测有没有数据到达socket

int result = select(0, &recvfd, NULL, NULL, &tv);
if( result > 0 )
{
//接受数据
//recvdata
}
Paradin 2009-03-12
  • 打赏
  • 举报
回复
thanks
Paradin 2009-03-11
  • 打赏
  • 举报
回复
回复4楼6楼,这样不会阻塞线程吗?
rosesherry 2009-03-11
  • 打赏
  • 举报
回复
select是一个好办法,也可以使用ioctlsocket的FIONREAD参数获得可读到的字节数
coyer 2009-03-11
  • 打赏
  • 举报
回复
用 do while

int nread = 0;
do
{
nread = recv(sockFrom, buf, 100, 0);
}while(nread > 0)

读完之后,读取到的数据个数为0.
oyljerry 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Paradin 的回复:]
恩我去看下select函数
我意识是说在确定有一些数据到来的前提下,我不知道会收到多少数据,想分段读到autobuffer中。
不行我就去看mfc封装的类是怎么做的呵呵。
[/Quote]
发送的数据包中带一个字段包含当前这个包有多少数据,你接收了就知道如何处理数据
Wenxy1 2009-03-11
  • 打赏
  • 举报
回复
do
{
int nBytes = recv(sockFrom, buf, 100, 0);
autoBuffer.Add(buf, nBytes);
} while (nBytes);
Paradin 2009-03-11
  • 打赏
  • 举报
回复
恩我去看下select函数
我意识是说在确定有一些数据到来的前提下,我不知道会收到多少数据,想分段读到autobuffer中。
不行我就去看mfc封装的类是怎么做的呵呵。
oyljerry 2009-03-11
  • 打赏
  • 举报
回复
可以用recv来判断你接收了多少数据,发送的时候带上数据大小等,当接收到你需要的数据后,就认为数据读完了
cnzdgs 2009-03-11
  • 打赏
  • 举报
回复
用select函数判断。

18,356

社区成员

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

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