社区
网络编程
帖子详情
如何判断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
打赏
收藏
如何判断socket缓冲区是否有数据到达
recv/recvfrom函数,阻塞式,想写下面代码: char buf[100]; AutoBuffer autoBuffer; int len = 100 while (缓冲区还有数据) { int nBytes = recv(sockFrom, buf, 100, 0); autoBuffer.Add(buf, nBytes); } 怎样判断缓存区还有数据呢?msdn和网上还没找到。初学,谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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函数判断。
java nio教程pdf
信息来自http://ifeve.com/server-
socket
-channel/ Java NIO: Channels and Buffers(通道和
缓冲区
) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和
缓冲区
(Buffer)进行操作,
数据
总是从通道读取到
缓冲区
中,或者从
缓冲区
写入到通道中。 Java NIO: Asynchronous IO(异步IO) Java NIO可以让你异步的使用IO,例如:当线程从通道读取
数据
到
缓冲区
时,线程还是可以进行其他事情。当
数据
被写入到
缓冲区
时,线程可以继续处理它。从
缓冲区
写入通道也类似。 Java NIO: Selectors(选择器) Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,
数据
到达
)。因此,单个的线程可以监听多个
数据
通道。
java
socket
缓冲区
_
Socket
缓冲区
疑问
Socket
的发送
缓冲区
大小为64512=63k,接收
缓冲区
大小为8192=8k,server端接收到client连接时启动一个线程,线程进入阻塞状态(接收第二个连接时才开始读取客户端
数据
),客户端程序开始读取本地文件(大于1M)往服务器发送
数据
,每次往输出流1k
数据
,发送到第80次时客户端也阻塞了,也就是前79次的
数据
要么已经
到达
服务器,要么在本地缓存,问题来了,79次*1k/次 - 客户端发送...
Socket
编程快速入门
本课程将理本课程将理啊 论结合实践,带你从零开始,系统学习
Socket
编程技术,让
Socket
的学习不再那么零散与难以掌握,同时会提炼出
Socket
网络传输的核心思想与构架,并带你踩坑出坑,增加你的分析与处理问题的啊aasa 能力,完善你的编程思想与知识体系。论结合实践,带你从零开始,系统学习
Socket
编程技术,让
Socket
的学习不再那么零散与难以掌握,同时会提炼出
Socket
网络传输的核心思想与构架,并带你踩坑出坑,增加你的分析与处理问题的能力,完善你的编程思想与知识体系。
Linux的
socket
缓冲区
Linux的soket
缓冲区
每个
socket
被创建后,都会分配两个
缓冲区
,输入
缓冲区
和输出
缓冲区
。 write()/send() 并不立即向网络中传输
数据
,而是先将
数据
写入
缓冲区
中,再由TCP协议将
数据
从
缓冲区
发送到目标机器。一旦将
数据
写入到
缓冲区
,函数就可以成功返回,不管它们有没有
到达
目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。 TCP协议独立于 write()/s...
C语言
socket
缓冲区
及阻塞模式/粘包问题/
数据
的无边界性、常见问题
socket
缓冲区
每个
socket
被创建后,都会分配两个
缓冲区
,输入
缓冲区
和输出
缓冲区
。write()/send() 并不立即向网络中传输
数据
,而是先将
数据
写入
缓冲区
中,再由TCP协议将
数据
从
缓冲区
发送到目标机器。一旦将
数据
写入到
缓冲区
,函数就可以成功返回,不管它们有没有
到达
目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。TCP协议独立于 write()/send() ...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章