社区
网络编程
帖子详情
非阻塞下,recv获取的长度不对,如何实现获取当前能够获取的长度?
lyvvv
2010-03-10 01:29:13
非阻塞模式下,主机端调用recv时获取的长度不是client发送的长度,包的长度是8k字节,调用recv有时能获取到8k,有时只能获取3k.
我的想法是先判断当前缓冲区的大小,再调用recv,但是怎么获取 当前 缓冲区的长度?
...全文
279
7
打赏
收藏
非阻塞下,recv获取的长度不对,如何实现获取当前能够获取的长度?
非阻塞模式下,主机端调用recv时获取的长度不是client发送的长度,包的长度是8k字节,调用recv有时能获取到8k,有时只能获取3k. 我的想法是先判断当前缓冲区的大小,再调用recv,但是怎么获取 当前 缓冲区的长度?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhou1xp
2010-03-10
打赏
举报
回复
呵呵,这个一个长度而已,楼主自己应该会自己处理吧,发一个结构体过去就行了
bragi523
2010-03-10
打赏
举报
回复
还是要规范一点好啊
先发个长度过去,然后循环接收就好了
Practise_Think
2010-03-10
打赏
举报
回复
一直收,收到你想要的长度就返回好了,而不要指望recv能每次返回你指定的长度
grany
2010-03-10
打赏
举报
回复
如果是用TCP收发,那收到的可能只是数据流的一部分,即使缓冲区没有满。TCP是流的协议,在发送端把10K的数据分100次发送和1次发完理论上没有区别。所以你必须使用循环来接收,直到你收到的数据大小和你想的一样大。如果不想这么麻烦,那就UDP就行了,要么收不到,只要收到了,就一定是你想要的大小。
hurryboylqs
2010-03-10
打赏
举报
回复
先发送长度后发送数据
前4个字节即可
Eleven
2010-03-10
打赏
举报
回复
right,循环接收
zhou1xp
2010-03-10
打赏
举报
回复
int RecvHunk(SOCKET h,char *lpBuf,int nBufLen,int nWillLen)
{
int nRecv = -1 ;
int nRecvAll = 0;
if( h != SOCKET_ERROR && lpBuf != NULL && nBufLen > 0 && nWillLen >0 && nBufLen >= nWillLen )
{
//循环接收,直到数据达到要接收的长度或出错就返回
do {
nRecv = ::recv(h, //已经连接的句柄
lpBuf+nRecvAll,//跳过已经接收的数据
nWillLen-nRecvAll,//计算剩余要接收的数据长度
0);
if( nRecv >0 )
nRecvAll += nRecv;//当前已经接收的长度
else
break;
} while( nRecvAll < nWillLen );
}
return nRecvAll;
}
python socket
recv
非阻塞
_socket
非阻塞
recv
大坑
也就是说,当运行到
recv
时,会在这个位置一直等待直到有数据传输过来,我在网上一篇文章看到:SunmmaryPython的socket.
recv
()方法可以通过传入flags=0x40参数配合try-except方法
实现
非阻塞
。于是便欣喜的放到了代码中,...
linux下
recv
长时间运行后会阻塞,linux下
recv
、send阻塞、
非阻塞
区别和用法
非阻塞
IO 和阻塞IO:在网络编程中对于一个网络句柄会遇到...
非阻塞
IO::
非阻塞
模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。(对于connect,accpet操作,通过select判断,对于
recv
,...
关于socket阻塞与
非阻塞
情况下的
recv
、send、read
(就我目前了解阻塞与
非阻塞
recv
返回值没有区分,都是 0接收到数据大小,特别:返回值 时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收。只是阻塞模式下...
关于
非阻塞
的
recv
的时候返回的处理
注意
recv
()如果读到数据为0,那么就表示文件结束了,如果在读的过程中遇到了中断那么会返回-1,同时置errno为EINTR。 因此判断
recv
的条件: 如果read返回 如果==0 表示文件结束, 处理 如果 ...
Socket的消息阻塞和
非阻塞
send/
recv
先理一下阻塞和
非阻塞
的概念: ...
非阻塞
则是不管运行结果如何,都会继续往下执行(往往都要处理很多返回结果),线程函数里一般都是一个循环,不停的轮询。 再理一下发送接收函数: send/sendto函数...
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章