客户端发送的数据(几十k)
服务器总是接受到8k左右。请问怎么才能够介绍完所有数据呢?
服务器接受流程大概为:
1.投递0字节的WSARecv
2.完成通知,利用recv接受数据
3.再次投递0字节的WSARecv但是recv接受数据的数据都不会超过8k,为什么呢?
服务器总是接受到8k左右。请问怎么才能够介绍完所有数据呢?
服务器接受流程大概为:
1.投递0字节的WSARecv
2.完成通知,利用recv接受数据
3.再次投递0字节的WSARecv但是recv接受数据的数据都不会超过8k,为什么呢?
解决方案 »
- 对话框最大化的牛逼问题
- 怎么显示背景黑色?
- 怎么样在修改完表格的数据以后刷新表格?
- 读注册表的函数RegQueryValueEx的问题,请各位近来帮忙看看
- 网络调用问题(网络注册),求各位指点一下,UP也有分!。。。。。
- 大虾,请帮帮小弟!关于CTreeCtrl派生的问题
- 已经下载到本地的一个html页面的所有元素,想要把他们组装成一个mht文件怎么做?
- 《mfc深入浅出》所带的光盘在vc和c++下运行不了呀,怎么样才能运行呀,请个位大侠年指点,小弟深表感谢谢!!!事后必拱手献100分以表谢
- 最好的开发站点非http://www.codeproject.com莫属!!!
- 请帮忙看看这是怎么回事?
- CSplitterWnd分割窗口
- CStdionFile::WriteString问题
那就是用计算后的长度做第四次的recv
因为我测试了只要少于8k,接受数据都是正确的。例如发送3k的数据用下面方式接受
1.投递0字节的WSARecv
2.完成通知,利用recv只接受1k数据
3.再次投递0字节的WSARecv
下次依然可以有完成通知,可以继续把剩余的2k接受完毕。但是如果数据量超过8k的话
接受了一次(小于发送数据)就不会有完成通知了
看看是不是与缓冲区相关
或者直接缓冲设为0得了......
因为一次接受完毕的数据量远远小于发送的数据量,所以再次WSARecv的话应该还会有通知才对的啊?
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)
//下面返回的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