Chinaunix

标题: upd传输数据 [打印本页]

作者: stiandao    时间: 2005-11-27 20:19
标题: upd传输数据
upd传输的数据包是有限的,我想问一下,如何处理upd包过大的问题
作者: stiandao    时间: 2005-11-27 20:21
我写的是udp,写错了,我现在传送的数据> 2048

请问如何执包呀
作者: wys0436    时间: 2005-11-28 10:11
用setsockopt中的 SO_RCVBUF 和SO_SNDBUF两个标志试试.
作者: stiandao    时间: 2005-11-28 10:48
原帖由 wys0436 于 2005-11-28 10:11 发表
用setsockopt中的 SO_RCVBUF 和SO_SNDBUF两个标志试试.


有的系统不支持,谁有拆包的程序????
作者: stiandao    时间: 2005-11-28 11:06
我现在的问题是,有时数据会大于>2048,所以要分几次来发,

我想问的是这边如何发,那边如何接,规则怎么订
作者: zhujunsoft    时间: 2005-11-28 12:35
可以使用协商,每段发送前先确定自己可以接受的最大长度,然后通知对方,以后的通讯以这个为准,超过长度的就自己分片,设计个协议,应该比较简单
作者: bigdipper    时间: 2005-11-28 12:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: stiandao    时间: 2005-11-28 13:18
原帖由 bigdipper 于 2005-11-28 12:41 发表
实际上以太网包最长为1500字节,而非你说的2048,其结构为:
ethernet header + ip header + udp header + application data
applicatio data实际上最长为1500- 14 - 20 - 8 = 1458.

其实分包(fragmentation)与 ...



使用udp不是不能自动拆包的吗,如果我一下发3500字节,那接受方能受到3500字节吗?
作者: bigdipper    时间: 2005-11-28 13:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: stiandao    时间: 2005-11-28 13:52
原帖由 bigdipper 于 2005-11-28 13:30 发表
"使用udp不是不能自动拆包的吗",你的自动拆包什么意思.  应用程序不用管一个大的数据块是如何在最大长度只有1500字节的以太网上发送的,这些由IP协议替你做了.
当然可以,对方会将数据包缓存起来(也是由 ...



我以前听别人说过:tcp 一次发送>1500 (比如发 3000字节) ,会自动拆成几个包,在发出去

udp一次发送>1500 (比如发 3000字节) 只会发出去一个包  那么接受方回接到不完整的数据


还是说udp一次发3000字节,系统会自动拆成几个包,在发出去,还是只发一个包????
作者: stiandao    时间: 2005-11-28 15:11
我以前听别人说过:tcp 一次发送>1500字节的数据 (比如发 3000字节) ,系统会自动拆成几个包发出去
我们只发一次就可以了

udp 一次发送>1500字节的数据 (比如发 3000字节) 系统只会发出去一个包  那么接受方回接到不完整的数据


还是说我现在用udp一次发3000字节数据包,系统会自动拆成几个包,在发出去,还是只发一个包????

哪位看看,回答一下
作者: bigdipper    时间: 2005-11-28 15:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: bigdipper    时间: 2005-11-28 15:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: redog    时间: 2005-11-28 16:18
标题: 回复 10楼 stiandao 的帖子
tcp/ip协议会自动处理的,用户使用只是在应用层,只管发和收就行了,拆包,解包都是透明的。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2