C# Socket tcp 发送数据大小问题

    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也只是开启迅雷的时候错误情况多.

转载于:https://www.cnblogs.com/smark/archive/2012/02/02/2335442.html

GitHub是一个基于web的版本控制和源代码托管平台。它提供了一个方便的界面,使开发者能够更轻松地管理和协作开发项目。GitHub是一个开放的平台,任何人都可以免费注册一个账户并创建自己的仓库。 使用GitHub,开发者可以将他们的代码仓库上传到平台上,并与其他开发者共享。这使得多人协作开发变得更加方便。开发者可以通过提交和合并请求来管理代码的更改,以及与团队成员讨论并审查代码。GitHub还提供了一系列的工具和功能,如问题跟踪、维基页面、部署、持续集成等,帮助开发者更好地管理和组织项目。 除了个人和团队项目外,GitHub还是开源社区的重要组成部分。许多开源项目都托管在GitHub上,任何人都可以自由地查看、复制、修改和贡献代码。开发者可以发现并加入他们感兴趣的开源项目,并与他人合作改进和维护。在GitHub上,开源社区可以通过拉取请求和议题来推动项目的发展。 GitHub不仅用于开发代码,还扩展到其他领域。许多学术研究项目也使用GitHub来管理和共享代码、数据集和文档。人们还可以使用GitHub Pages来创建静态网站,以展示他们的项目、博客或个人简历。 总之,GitHub提供了一个便捷的平台,使开发者能够更好地管理和协作开发项目。它成为开源社区的中心,促进了代码的共享和合作,使开发人员能够更好地学习和成长。无论是个人项目、团队协作还是开源贡献,GitHub都发挥着重要的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值