社区
网络编程
帖子详情
UDP后续数据的接收问题(对方数据超过接收缓冲区长度)
tangrh
2004-10-18 05:22:55
各位高手,假设现在我的UDP客户端发送过来一个较大的包,我调用WSARecvFrom或RecvFrom时提供的缓冲区长度比这个小,这时第一次接收完成,但没有收全对方的内容,这时我应该怎么办呢?如何再次针对同一个客户端发起后续接收呢?兄弟百思不得其解啊!
...全文
1111
22
打赏
收藏
UDP后续数据的接收问题(对方数据超过接收缓冲区长度)
各位高手,假设现在我的UDP客户端发送过来一个较大的包,我调用WSARecvFrom或RecvFrom时提供的缓冲区长度比这个小,这时第一次接收完成,但没有收全对方的内容,这时我应该怎么办呢?如何再次针对同一个客户端发起后续接收呢?兄弟百思不得其解啊!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
了解
UDP
文章目录
udp
的特点:
udp
的首部格式:
UDP
的缓冲区
UDP
使用注意事项基于
UDP
的应用层协议
udp
的特点: 1、无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接; 2、不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方,
UDP
协议层也不会给应用层返回任何错误信息; 3、面向
数据
报: 应用层交给
UDP
多长的报文,
UDP
原样发送, 既不会拆分, 也不会合并。不能够灵活的控制读写
数据
的次数和数量 3、不可靠,尽最大努力交付 4、没有拥塞控制 5、支持一对一,一对多,
udp
缓冲区
udp
【博客282】
udp
socket的recvfrom函数的一个易错
问题
内容: 当使用
udp
socket的recvfrom函数的时候,如果指定缓冲区大小不够会怎么样
问题
: 当recvfrom
接收
udp
socket的
数据
的时候,如果你用来
接收
的缓冲区太小,那么会出现让你 惊讶的情况 服务端实例代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #
网络协议:
UDP
一
UDP
协议及其特点 1.1 什么是
UDP
协议
UDP
: User Datagram Protocol, 用户
数据
报协议,它是一种无连接,不可靠的传输,面向报文的一种协议。在IP协议的基础上提供了简答的功能,比如:复用分用和差错检测功能 1.2
UDP
协议特点 #1 无连接: 和IP协议一样,发送
数据
报之前不需要建立连接,减少了网络开销和延时,节省了系统资源 #2 不可靠: 和IP协议一样,只保证尽最大努力交付,所以不保证可靠交付。因此不需要维护一些复杂的连接状态信息,适合可以接受
数据
丢失的
面试题【网络收发
数据
与缓存大小不匹配
问题
,TCP/
UDP
分析】
—————-此篇为找工作后的小脆所写, 比较基础——————题目 前提: 发送方一次发送20M
数据
,接受缓存4K; 讨论: TCP 和
UDP
协议下 ,发送方、
接收
方现象,并解释原因。 先回答
问题
:TCP协议: 发送方能发出去,接受方能
接收
到
数据
, 每次
接收
大小为4K,可循环
接收
; 【 相关函数: send recv】
UDP
协议: 发送方发送失败返回-1,接受方自然没收到数
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章