TCP/IP是可靠性传输协议,它能保证数据能按顺序的方式到达目的地.看到以上描述在写TCP/IP应用的时候似乎就可以放心了,只要程序不出意外就数据输传就是正确.但最近在做一个文件传输工作的时候确得到的结果并不是这样,发现网络环境和一次发送数据大会影响整个输传结果.以下是这两晚的测试情况

测试内容描述:

每个文件块信息包大概是120k左右

采用异步5连接输传,双方的Socket.SendBufferSize和Socket.ReceiveBufferSize都设置为64K

测试服务器分别有:

局域网:ServerA

在美国机房:ServerB 延时高,Ping有时会超时

测试client一台,通过ADSL上网.

以下是Client从Sever下载文件的情况:

  • 服务器8K SendBuffer,客户端是8K ReceiveBuffer

从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.

从ServerB下载文件,分别下载多个文件,几M或更小的文件有部分正确,大文件基本都是错误.两端记录的发送的字节数和接收的字节相等,符合文件大小,程序也没有跟踪到数据接收异常导致的协议分解错误.

  • 服务器4K SendBuffer,客户端8K ReceiveBuffer

从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.

从ServerB下载文件,分别下载多个文件,文件的正确率比较高,不过还是大文件相对错误比较多.当开启迅雷下载后情况就开始变坏,大部分接收到的文件都出问题,两端记录的发送的字节数和接收的字节相等,符合文件大小,程序也没有跟踪到数据接收异常导致的协议分解错误

  • 服务器2K SendBuffer,客户端8K ReceiveBuffer

从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.

从ServerB下载文件,分别下载多个文件,下载结果没有发现错误文件.当开启迅雷下载后还是有个别文件错误,两端记录的发送的字节数和接收的字节相等,符合文件大小,程序也没有跟踪到数据接收异常导致的协议分解错误

  • 服务器1K SendBuffer,客户端8K ReceiveBuffer

从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.

从ServerB下载文件,分别下载多个文件,下载结果没有发现错误文件.当开启迅雷下载后没有发现文件错误.

测试文件发送到Server和下载的情况基本差不多,这说明了在网络不好的情况处理发送大数据包似首容易产生错误,但看TCP/IP协议讲解这情况似乎不存在,因为当一个发送数据超过某个值的时候,TCP会划分块进行传输并保证其顺序.但网络不好的情况测试结果接收的数据有错误,但处理的数据大小是正确的,也并没影响整个协议的分解.由于对CP/IP协议、低层和路由处理的不了解,暂没找到具体原因。。。不排除程序存在还没发现的错误,打算给发送的文件数据加上校验再测试一下看情况

补充一下

以上测试只修改了一个属性

TcpUtils.SendBufferLength = 1K,2K,4K,8K

但只有1K的测试结果奇怪地没出现文件错误,其了几中均出现仅仅是对ServerB,对ServerA来说没有出现,2K,4K也只是开启迅雷的时候错误情况多.

C# Socket tcp 发送数据大小问题相关推荐

  1. Linux内核 - tcp发送数据从应用到驱动经历的函数调用

    这张是Linux操作系统,tcp发送数据,从应用到驱动,发送一个数据块所调用的函数序列: 同一颜色是调用其中某一个,还是从上到下逐个调用,还不了解: 记得以前看一本Windows驱动开发的书说,Win ...

  2. tcp 发送数据长度比预设缓存大_一文秒懂 TCP/IP实际五层结构(下篇)

    点击上方蓝字关注我们! 引言 本运维老狗在TCP/IP实际五层结构的上篇和中篇中详细讲解了TCP/IP实际结构,以及以太网协议.IP协议.和UDP协议.有同学留言催更,迫切的想看本老狗对TCP协议的讲 ...

  3. Powerbuilder 使用Socket函数发送数据

    天想使用pb10来操作socket函数, 在这里写个测试代码,以作备用. PowerBuilder 测试代码: API函数声明 FUNCTION Long WSAStartup ( Integer w ...

  4. 2022-4-11 修改TCP发送缓冲区大小

    设置发送缓冲区的大小 #include<stdio.h> #include<arpa/inet.h> #include<stdlib.h> #include< ...

  5. matlab用socket线程发送数据,使用Python Twisted和Autobahn从Matlab通过WebSocket发送JSON数据...

    我正在尝试创建一个从Matlab到WebSocket流JSON帧的连接.我用下面的代码测试了我的python安装和twisted.在 工作实例 Matlab代码 示例驱动程序代码,它使用JSONlab ...

  6. Silverlight使用RSA加密socket tcp通讯数据

    在tcp通讯中为了数据安全在某些情况下对数据进行加密传输是很有必要的,可惜的是MS并没有为Silverlight提供一些标准的加密功能实现.如果你想在Silverlight中使用RSA或DES这些标准 ...

  7. GPRS模块的TCP发送数据流程

  8. linux tcp socket 接收的字节数与发送的字节数不符,TCP发送接口(如send(),write()等)的返回值与成功发送到接收端的数据量无直接关系...

    1. TCP发送接口:send() TCP发送数据的接口有send,write,sendmsg.在系统内核中这些函数有一个统一的入口,即sock_sendmsg().由于TCP是可靠传输,所以对TCP ...

  9. linux 内核 发送数据,linux 内核tcp数据发送的实现

    在分析之前先来看下SO_RCVTIMEO和SO_SNDTIMEO套接口吧,前面分析代码时没太注意这两个.这里算是个补充. SO_RCVTIMEO和SO_SNDTIMEO套接口选项可以给套接口的读和写, ...

最新文章

  1. vs2010快捷方式
  2. 去除桌面图标蓝底的方法步骤
  3. 342. Power of Four
  4. 空客fctm避免已识别风险_最远可航行15000公里,南航首架空客A350飞机首航,将先飞广州-上海航线再飞国际...
  5. word-break属性和css换行显示
  6. get_class 方法
  7. 限时授权复制文件 1.0(2015.9.2更新)
  8. Insus NET Utility
  9. mysql一条sql是一个事物么_mysql 事物浅析
  10. 仿权重8高收录面包网pc+手机苹果cmsv8影视网站含迅雷下载N430模板
  11. java 函数签名_Java方法签名和接口
  12. 火狐linux 32位,火狐浏览器32.0版本-Firefox(火狐浏览器)32.0版下载 v32.0官方版--pc6下载站...
  13. CSS 基础篇、绝对有你想要
  14. 朴素贝叶斯 二项式 伯努利
  15. 爆料:Micron计划推出OLC(Octa Level Cell) NAND
  16. html简单留言板教程,JS实现简易留言板(节点操作)
  17. 推荐两个本地知识笔记软件
  18. 搭建S60手机端Python软件运行,开发,发布平台
  19. springboot +mybatisPlu控制台打印sql
  20. STM32CubeMX | STM32使用HAL库进行脉冲宽度和周期测量

热门文章

  1. 使用Onedrive
  2. 计划任务中使用NT AUTHORITY\SYSTEM用户和普通管理员用户有什么差别
  3. 新媒体营销操作手法及案例分享-初贵民
  4. 高可用集群HA基本知识概述
  5. 一个中产阶级丈夫给坚持买房妻子的一封信
  6. SQL2000系統表的應用
  7. 计算机高级技师论文网,高级技师论文(数控铣床、加工中心).doc
  8. 怎样卸载连接老师的计算机软件,我的电脑里面solidworks无法卸载,,老师能帮我下吗...
  9. drupal的php运行版本,Drupal 运行的系统要求
  10. 1一10到时的英文单词_哈尔滨一山羊皮,叫雪地皮衣!刮风下雪不冻身,10年免洗不过时...