UDP后续数据的接收问题(对方数据超过接收缓冲区长度)

tangrh 2004-10-18 05:22:55
各位高手,假设现在我的UDP客户端发送过来一个较大的包,我调用WSARecvFrom或RecvFrom时提供的缓冲区长度比这个小,这时第一次接收完成,但没有收全对方的内容,这时我应该怎么办呢?如何再次针对同一个客户端发起后续接收呢?兄弟百思不得其解啊!
...全文
1111 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
慕马人 2004-10-22
  • 打赏
  • 举报
回复
UDP:接收时若缓冲区不够,大包的剩余部分会扔掉
你要传大包,做切片就可以了,接收方重组即可.
tangrh 2004-10-22
  • 打赏
  • 举报
回复
呵呵,我要结贴了
tangrh 2004-10-21
  • 打赏
  • 举报
回复
??????????
bianliuwei 2004-10-20
  • 打赏
  • 举报
回复
在UDP方式下超过接收缓冲区的那部分会被丢弃啊,在流式接收的情况下可继续接收
anni 2004-10-20
  • 打赏
  • 举报
回复
发小包不行吗?其实发小包也能解决问题的话就发小包好了,而且小包没有大包容易丢掉
gdy119 2004-10-20
  • 打赏
  • 举报
回复
我觉得在来之前你就应该判断啊,
DWORD nSize;
ioctlsocket(s,FIONREAD ,&nSize);
if(nSize>8k) //默认的为8K(或者调用函数直接获取缓冲区大小)
int nRecvBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
icelight 2004-10-20
  • 打赏
  • 举报
回复
UDP主要用于实时数据的传送,不在乎丢包,不象TCP那样丢一个字节就反反复复要求发送方重发。

不在乎丢包就一点都不麻烦。想传大数据又不想麻烦就用TCP。
qiyao 2004-10-20
  • 打赏
  • 举报
回复
<--------------高手看过来! 能不能搞定这个?
http://community.csdn.net/Expert/topic/3472/3472337.xml?temp=.1701624
tangrh 2004-10-20
  • 打赏
  • 举报
回复
没有人关注了?
tangrh 2004-10-20
  • 打赏
  • 举报
回复
TCP下当然可以随便玩,这我知道
tangrh 2004-10-20
  • 打赏
  • 举报
回复
列位:
我现在是采用和完成端口结合的方式,调用WSARecvFrom得到的是997正在重叠的结果,因此,并不知道后续包的长度,当然在发送方可以控制包大小,我这里只是探讨一下可不可以多次接收,如果可行,怎么做
panyongjun 2004-10-19
  • 打赏
  • 举报
回复
对于UDP,如果提供缓冲区太小而不能容纳一个数据报的内容,那么这个数据报的其它部分会被丢弃。如数据报长度为100B,而提供的缓冲区只有80B,那剩下的20B就被丢掉了!
所以对于UDP一定要保证提供足够大的缓冲。
tangrh 2004-10-19
  • 打赏
  • 举报
回复
那这样不是很麻烦吗,难道就意味着只能发小包包,而且接收方不能象TCP那样想接收多少就接收多少?呜呼,我始终觉得应该还有别的见解啊,虽然这样也不一定影响UDP应用。
agent 2004-10-19
  • 打赏
  • 举报
回复 1
欲接受的数据长度超过缓冲区长度时候,超出的部分会被丢弃。
MSDN有明确的解释。

对于数据报类套接口,队列中第一个数据报中的数据被解包,但最多不超过缓冲区的大小。如果数据报大于缓冲区,那么缓冲区中只有数据报的前面部分,其他的数据都丢失了,并且recvfrom()函数返回WSAEMSGSIZE错误。
Caps77 2004-10-19
  • 打赏
  • 举报
回复
我也搞蒙了
shakira008 2004-10-19
  • 打赏
  • 举报
回复
学习
nkwesley 2004-10-19
  • 打赏
  • 举报
回复
发送速度太快,一种方法是加大接收缓存,在控制论上属于闭环控制;
另一种方法是采用流量控制,要求UDP发送方减缓发送速度,比如自己模仿TCP写一个滑动窗口什么的,这是开环控制。
nkwesley 2004-10-19
  • 打赏
  • 举报
回复
这牵涉到流量控制的内容,建议楼主看看Qos方面的内容
tangrh 2004-10-19
  • 打赏
  • 举报
回复
呵呵,我已经糊涂了,到底谁说得对呢?如果如panyongjun兄说的,呵呵,那就惨了,还是不明白啊
tangrh 2004-10-19
  • 打赏
  • 举报
回复
大家发送的都是小包包?
加载更多回复(2)

18,356

社区成员

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

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