社区
网络编程
帖子详情
完成端口接受大数据的问题
littlebao
2008-12-17 11:48:49
客户端发送的数据(几十k)
服务器总是接受到8k左右。请问怎么才能够介绍完所有数据呢?
服务器接受流程大概为:
1.投递0字节的WSARecv
2.完成通知,利用recv接受数据
3.再次投递0字节的WSARecv
但是recv接受数据的数据都不会超过8k,为什么呢?
...全文
169
23
打赏
收藏
完成端口接受大数据的问题
客户端发送的数据(几十k) 服务器总是接受到8k左右。请问怎么才能够介绍完所有数据呢? 服务器接受流程大概为: 1.投递0字节的WSARecv 2.完成通知,利用recv接受数据 3.再次投递0字节的WSARecv 但是recv接受数据的数据都不会超过8k,为什么呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
littlebao
2008-12-20
打赏
举报
回复
int nOptionValue,nOptionSize=sizeof(int);
//下面返回的nRcvBuffer是8192
getsockopt(m_hSocket,SOL_SOCKET,SO_RCVBUF,(char*)&nOptionValue,&nOptionSize);
INT nRcvBuffer=32*1024;
int nRetCode=setsockopt(m_hSocket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRcvBuffer,sizeof(nRcvBuffer));
nOptionSize=sizeof(int);
//下面返回的nRcvBuffer是32768
getsockopt(m_hSocket,SOL_SOCKET,SO_RCVBUF,(char*)&nOptionValue,&nOptionSize);
说明设置成功了。但是recv接受到的数据仍然是8336
whatabig
2008-12-19
打赏
举报
回复
post intial recv:
WSARecv(lenhdr)
recv_loop:
GetOverlappedResult() or GetQueuedCompletionStatus()
validate_msg_header(ptrhdr) & get lenbdy
WSARecv(lenbdy)
insert_msg_into_queue(ptrbdy)
WSARecv(lenhdr)
僵哥
2008-12-19
打赏
举报
回复
[Quote=引用 19 楼 littlebao 的回复:]
引用 18 楼 unsigned 的回复:
引用 2 楼 littlebao 的回复:
但是接受完一次后(小于发送大小)就再也接受不到完成通知了。
通知返回之后有再次WSARecv么?如果没有,当然不会再通知,通知与请求之间是一对一的匹配关系。
因为一次接受完毕的数据量远远小于发送的数据量,所以再次WSARecv的话应该还会有通知才对的啊?
[/Quote]
是的,理论上是这样子,建议检查其它可能存在的错误。任何内存访问的违规都有可能导致不可预知的错误。
littlebao
2008-12-19
打赏
举报
回复
[Quote=引用 16 楼 zzdmfk 的回复:]
与重叠IO模型配合。
[/Quote]
大哥,能否说详细点?
littlebao
2008-12-19
打赏
举报
回复
[Quote=引用 18 楼 unsigned 的回复:]
引用 2 楼 littlebao 的回复:
但是接受完一次后(小于发送大小)就再也接受不到完成通知了。
通知返回之后有再次WSARecv么?如果没有,当然不会再通知,通知与请求之间是一对一的匹配关系。
[/Quote]
因为一次接受完毕的数据量远远小于发送的数据量,所以再次WSARecv的话应该还会有通知才对的啊?
僵哥
2008-12-19
打赏
举报
回复
[Quote=引用 2 楼 littlebao 的回复:]
但是接受完一次后(小于发送大小)就再也接受不到完成通知了。
[/Quote]
通知返回之后有再次WSARecv么?如果没有,当然不会再通知,通知与请求之间是一对一的匹配关系。
qqlpp
2008-12-19
打赏
举报
回复
帮顶
路人乙2019
2008-12-19
打赏
举报
回复
与重叠IO模型配合。
sigh02
2008-12-19
打赏
举报
回复
如果你觉得8k这个数有什么特殊含义,可以setsockopt SO_RCVBUF更改缓冲区大小
看看是不是与缓冲区相关
或者直接缓冲设为0得了......
[Quote=引用 11 楼 littlebao 的回复:]
我怀疑是不是底层把剩余的数据丢弃了。
因为我测试了只要少于8k,接受数据都是正确的。
例如发送3k的数据用下面方式接受
1.投递0字节的WSARecv
2.完成通知,利用recv只接受1k数据
3.再次投递0字节的WSARecv
下次依然可以有完成通知,可以继续把剩余的2k接受完毕。
但是如果数据量超过8k的话
接受了一次(小于发送数据)就不会有完成通知了
[/Quote]
littlebao
2008-12-18
打赏
举报
回复
但是接受完一次后(小于发送大小)就再也接受不到完成通知了。
cnzdgs
2008-12-18
打赏
举报
回复
socket的接收缓冲区默认是8KB,剩下的数据下次再收。
dotnet90
2008-12-18
打赏
举报
回复
d
caitian6
2008-12-18
打赏
举报
回复
学习
sigh02
2008-12-18
打赏
举报
回复
不好意思,我看错了,你是总投递长度为0的WSARecv...
那就是用计算后的长度做第四次的recv
闪破风浪
2008-12-18
打赏
举报
回复
串口通讯带宽本来就有限,分批发送。。。。
sigh02
2008-12-18
打赏
举报
回复
第3次不应该投递0的WSARecv,应该计算还有多少没收,就WSARecv多少...
fandh
2008-12-18
打赏
举报
回复
只要分开发送,应该可以的呀!不知道你那儿没有做好!不行就贴代码!
yjgx007
2008-12-18
打赏
举报
回复
仔细检查代码.
blackcat242
2008-12-18
打赏
举报
回复
[Quote=引用 2 楼 littlebao 的回复:]
但是接受完一次后(小于发送大小)就再也接受不到完成通知了。
[/Quote]
这个还有这种事情?代码贴出来看看
littlebao
2008-12-18
打赏
举报
回复
是为了降低未分页内存池的使用来提高系统总容量
加载更多回复(3)
大数据
视频_Flume视频教程
是
大数据
大数据
开发工程师必须会的框架之一。在本课程中,你将学习到,Flume架构原理、安装配置、拓扑结构、使用Flume搭建监控
端口
采集数据、监控本地(或HDFS)文件(或文件夹)采集数据、多数据源采集数据、多数据出口...
大数据
-
大数据
开发技术课程总结(未完)
大数据
开发课程主要从了解
大数据
概念、特征开始,再介绍
大数据
Java开发和Hadoop的环境配置,较为全面地讲解了HDFS分布式存储,MapReduce分布式计算框架,Spark平台开发和Scala编程语言.归根结底,我总结了一下本学期...
大数据
常见面试
问题
汇总
目录 第1章 核心技术 1.1 Linux&Shell 1.1.1 Linux常用高级命令 1.1.2 Shell常用工具及写过的脚本 1.1.3 Shell中单引号和双引号区别 1.2 Hadoop 1.2.1 Hadoop常用
端口
号 1.2.2 HDFS读流程和写流程 1.2.3 HDFS小文件...
C# Socket传输
大数据
通过将
大数据
分块发送或接收,可以有效地处理大量的数据,避免网络传输延迟和内存溢出的
问题
。在接收
大数据
时,我们也可以采用类似的方法,将接收到的数据块逐个拼接起来,以获取完整的
大数据
。在C#中,使用Socket...
大数据
常用技术梳理
热爱
大数据
技术或者从事
大数据
开发方面可以来看看. 应该会对您有所帮助~~~
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章