★★★高分送智者——如何用Winsock传输连续的大量数据?★★★

puffgeng 2004-11-25 07:18:10
用Socket进行连续的大数据量的传输时,TCP和UDP都有限制,TCP会自动进行断帧处理,UDP限制传输缓冲区数据不得超过8KB,请问通过什么方法可以实现连续的大数据量传输?如传输视频和音频。
我看了一些文章,好像可以通过异步传输的消息模式实现,但有没有其它方法,请高手支招。
...全文
336 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2004-11-30
  • 打赏
  • 举报
回复
楼主可能是用了应用层协议来在双方之间通信,因而是不是可能需要自己拆包和组包
oyljerry 2004-11-30
  • 打赏
  • 举报
回复
参考RTP协议
puffgeng 2004-11-30
  • 打赏
  • 举报
回复
想多大就多大显然是不对的。mhorse(火狮)怎么不出现了啊?
论坛上也有许多相关的帖子,但都没有答案,难道这个问题很难回答啊?
tangrh 2004-11-30
  • 打赏
  • 举报
回复
呵呵,我的意思是你想多大就可以多大
Leryan 2004-11-29
  • 打赏
  • 举报
回复
回复人: kingzai() ( ) 信誉:115

use TransmitFile API
http://search.csdn.net/Expert/topic/1164/1164621.xml?temp=.1789514

没用的连接也帖出来。
不来了。
puffgeng 2004-11-29
  • 打赏
  • 举报
回复
问题还是没有解决啊,众说异词。
我问的是Socket的数据包的限制,所以 tangrh(阿唐)你是所答非所问。
mhorse(火狮)的回答较为让人接收,但请教具体解决办法。
blastzgd 2004-11-26
  • 打赏
  • 举报
回复
UDP要处理断帧我知道。
TCP好像是系统自己处理的

楼主,我没明白你的意思。
TCP被系统断帧后是加了顺序标志的,
你接收到的数据感觉不到被系统断帧。
mhorse 2004-11-26
  • 打赏
  • 举报
回复
tcp会把大的数据分成多个断帧传送,因此在接收端将收到多个断帧,所以
需要程序员自己实现断帧检测和再组合功能。
kingzai 2004-11-26
  • 打赏
  • 举报
回复
use TransmitFile API
http://search.csdn.net/Expert/topic/1164/1164621.xml?temp=.1789514
mhorse 2004-11-26
  • 打赏
  • 举报
回复
其实大家说的都很对,关键是“断帧”断的是什么类型的帧?是用户自定义的数据包还是IP协议的包。
当我们利用TCP/IP协议建立一条面向连接的SOCKET通讯通道时,数据将被分成一个个IP包在这个通道进行传输,传输控制协议-TCP保证了这些IP包进行数据传输时是按顺序提交,接收方按顺序接收的,整个传输过程还包含了纠错机制,重发机制,自动平衡传输速度等机制,所以是一种可靠的传输。但是当我们向对方传输的信息有很多种类时,而这些不同的信息传输时间具有不确定性时,我们就需要在
接收双方建立一个通讯协议,这种协议在网络分层中处于最顶层--应用层协议,它处在
TCP/IP协议上之上,经过应用层协议打包的一帧数据可能会被tcp分成多次传输,因此需要在接收方增加断帧检测。
jiudon 2004-11-26
  • 打赏
  • 举报
回复
是啊,不过udp的速度会另你满意的,至于校验的方法,根据你要求数据的准确性来定了!
tangrh 2004-11-26
  • 打赏
  • 举报
回复
哈哈,不要急,还是先去看看协议
tcp不是基于字节流的么,它这个流可厉害,保证从头流到尾,保证先发先到,顺序绝对保证,内容绝对正确,什么断帧,什么丢包,不可能,如果有这些,那叫什么可靠协议,对方发送多少,你就一定可以收多少,而且一个字节都不会差,拆包和组包都不是你管的,网络分层啊,兄弟。这些对应用层程序员来讲是透明的,管那干吗?
看看winsock2的api声明,谁说只能发小块数据?它定义的长度是dword哦,没有试过之前不要乱讲。
另外,TransmitFile不能传数据?呵呵,好好研究去吧
puffgeng 2004-11-26
  • 打赏
  • 举报
回复
我是用来传输流数据的,因此TransmitFile函数可能不适用。
blastzgd(边城浪子) ,你的意思是不是TCP不用在程序中进行断帧的处理,只要一个recv下来,所有数据都接收了?但实际当中好像不是这样啊,TCP一次recv也只能接收有限的数据。这一点mhorse(火狮)说得应该没错。
但mhorse(火狮)你能否说详细点如何实现断帧检测和再组合功能?

谢谢大家!!
gdy119 2004-11-26
  • 打赏
  • 举报
回复
TransmitFile 或者是send() ,recv()用循环:
while(seek)
{ send()}
while(end)
{recv()}
sharkhuang 2004-11-25
  • 打赏
  • 举报
回复
tcp没有问题!什么叫可靠传输

udp需要自己做可靠 例如sftp
whwjn 2004-11-25
  • 打赏
  • 举报
回复
你说反了吧,tcp是有8k的缓冲区,udp会自动断帧
对于tcp来说
int nZero=0;
setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero));//直接发送
int nZero=0;
setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(int));//直接接收
udp发送端只管发送就好了,收端用eventselect模型来实现收,udp是整包发整包收的,
也可以在应用层自己分包组包

18,356

社区成员

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

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