• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > TCP发送大的数据

TCP发送大的数据

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了tcp发送数据,发送tcp数据包,发送和接收tcp数据包,tcp客户端发送数据,c#tcp发送数据等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:TCP发送大的数据
描述:

1、TCP如何发送一个比较大的数据(通过多次发送还是其他方法,比如while);
2、如何定义每次发送的buffer大小尽量减小丢包


解决方案1:

TCP是流传输,直接使劲发就行,例如windows上可以用ws2的send函数猛发。不用考虑一次发多少,底层API会自动处理的,它发不出去会存放在内存,你不必自己再搞内存缓冲。
至于是否丢包,是网络状况决定的。当然你也可以在应用层协议上做包验证和重发机制。(个人觉得没什么必要,HTTP协议也没有验证和重发机制不照样用得好好的么。)

解决方案2:

楼主的问题很模糊,我只能根据我的理解解答了。
楼主用什么语言?我默认是C的话,如下:

  1. TCP发送不需要你太多关心,只要调用send(),操作系统的TCP实现会保证把你的数据发出去(网络畅通)。

  2. 收的时候可能需要recv()多次,因为TCP也不能保证发出去的包会一次都到达。需要加一个while()循环来保证收到全部的数据。

  3. 你指的BUFFER大小是什么?是TCP协议的BUFFER大小么?我默认是的,那这个BUFFER的大小是有操作系统默认的,一般是64KB, 当然也可以有程序设定的。操作系统还会有一个最大BUFFER的设置,默认可能是256KB, 也可能比这个大。如果为了优化TCP,你可以这样设置你的最大BUFFER大小:

    max buffer size = RTT(单位s) * bandwidth(单位Mbps) /8
    

    比如,你的带宽是100Mbps, RTT是150ms, 则需要至少1.875M的最大BUFFER。如果是Linux的话,你可以在/etc/sysctl.conf文件里这样设置:

    # increase TCP maximum buffer size
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    # increase Linux autotuning TCP buffer limits
    # min, default, and maximum number of bytes to use
    net.ipv4.tcp_rmem = 4096 87380 16777216 
    net.ipv4.tcp_wmem = 4096 65536 16777216
    

    保存后执行sysctl -p即可。(上面的数字是我瞎写的哦,不要当真,后果自负)

  4. 如果你指的BUFFER是你的程序里数据大小的话,你在发送时不需要关心,TCP会根据实际情况把你的大数据分组发送的。(当然,如果你的带宽足够,且MAX BUFFER SIZE设置也合理地足够大,可能会把你的大数据一次发出去也说不定呢)。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • TCP发送大的数据
  • TCP发送数据,什么时候需要对数据加密

相关文章

  • 2017-06-07 有没有学习算法的好的思路,或者好书?
  • 2017-06-07 有一些0kb的文件,怎么样把网址列表出来重新同步
  • 2017-06-07 python中,如何删除html页面中的文字,只留下html标签?
  • 2017-06-07 (laravel)关于企业内部系统架构设的计问题
  • 2017-06-07 (VFP)ShellExecute在WIN7中不能用了?
  • 2017-06-07 java正则表达式语法JAVA正则表达式匹配空格或换行符
  • 2017-06-07 python的suds调用webservice报错求解释
  • 2017-06-07 求只能英文与汉字的正则,不能有其他的字符,包括空格
  • 2017-06-07 怎样在函数内定义的函数中访问外层函数的变量?
  • 2017-06-07 python的simplehttpserver跟nginx哪个占用资源更少?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 大神们帮我看看我用python写的决策树类··一直不对
    • 求一种数据结构能够存储大量字符串分类信息类似bloomfilter,但是要存储的数据更多
    • 请问这里的正则匹配有错么/[^

      ]??=<\/p>/

    • PHP-sdk获取不到列表文件,请问怎么解决?
    • 正则表达式空格正则表达式匹配@和空格之间的字符
    • 如何删除视频碎片文件?
    • 有没有人知道使用40bitRC4加密的PDF文档口令是怎样验证的
    • 使用七牛的前端上传不成功
    • “wwwbaiducom”和“wwwbaiducom/”哪种访问方式速度快?
    • 初学jbpm的问题,解决了的我交学费,1000元在线等

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有