关于用UDP协议 每次发送很大的数据包的问题

AntonlioX 2005-05-20 09:40:58
我现在在做视频传输。我想问每次发送的包很大 比如有100k(一次发送一视频帧)的大小。是不是可以这样做的? 因为我猜测网络协议的底层会自动进行分包, 在接收端再重新组包,我的说法是否正确啊。

此外,我还有一个问题: 在用udp发送比如视频的数据的时候 是一次发送很大的包好,还是分多次,小包发送啊?
...全文
602 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nuaa3 2005-05-21
  • 打赏
  • 举报
回复
我把代码发给你了
xiao_xiao_zi 2005-05-20
  • 打赏
  • 举报
回复
分成小包比较好
这样丢包的话代价也比较小
AntonlioX 2005-05-20
  • 打赏
  • 举报
回复
我刚查的一点资料 ,提到了分片的问题
===================
3、 IP分片

  任何IP层接收到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据,并查询该接口的MTU。IP把MTU与数据报的长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发送在中间路由器上。IP数据报分片后,只有到达目的主机后才进行重装。
IP首部与分片有关的字段:

(1)对于每份IP数据报来说,都有一个标识字段,该值在分片时被复制到每个片中。

(2)标志字段用其中一个bit表示“更多的片”,除最后一片外,其他每个分片都要设置为1。

(3)片偏移字段指的是该片偏移原始数据报开始处的位置。

(4)数据报被分片后,每个片的总长度要改为该片的长度值。

(5)标志字段中有一个bit表示“不分片”,如果该位1,IP将不对数据报进行分片。
  IP报即使丢失一片数据报也要重传整个数据报。为什么呢?因为IP层没有超时重传的机制,必须由更高层负责超时重传。
AntonlioX 2005-05-20
  • 打赏
  • 举报
回复
但是udp 效率高啊。 视频通讯中基本都是用的udp
hdqlj 2005-05-20
  • 打赏
  • 举报
回复
为什么不用tcp呢
AntonlioX 2005-05-20
  • 打赏
  • 举报
回复
但是我看了 vckbase的一个例子 VideoNet

它里面就是 发送很大的包来传输视频的:

//Compress the data...to h263
......
CompressFrame(&cparams, &bits);

// Transmit the compressed frame
.......
dvideo.SendVideoData(cdata,count); //dvideo 是个CSocket类的派生类的对象,用来发送vidoe
===========
其中cdata 是里面定义的全局变量
unsigned char cdata[10000];



在接收的部分
全局变量 static unsigned char data[2000],vdata[30000],adata[5000];


在接收中
unsigned int DSocket::vlength=30000;

.........
ReceiveFrom(vdata,vlength,address,port);
.........


--------------------
它的代码中就是使用的发送的远远超过2k的数据大小 和你们上面说的有点矛盾啊?
yonk 2005-05-20
  • 打赏
  • 举报
回复
UDP每次发送的包不能超过最大包大小,否则你会收不完整。关于此点详细解释请见msdn。另外如果本地arp缓存中没有对方地址时,包比较大会产生多次arp交互。或许这也是需要注意的地方。
younggle 2005-05-20
  • 打赏
  • 举报
回复
视频传输,别忘记编码压缩啊。如果确实不能压缩,那建议你分多次小包发送,每个小包的长度不要超过2K(2048)个字节。
AntonlioX 2005-05-20
  • 打赏
  • 举报
回复
大家来讨论一下啊
zhjie374 2005-05-20
  • 打赏
  • 举报
回复
分开发吧....
nuaawenlin 2005-05-20
  • 打赏
  • 举报
回复
压缩加分块

18,356

社区成员

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

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