找回密码
 加入怎通
查看: 534|回复: 1

[关于百度] 解决C# Socket发送数据大小而影响整个传输的问题

[复制链接]
Q18310195 发表于 2013-01-06 15:56:33 | 显示全部楼层 |阅读模式
TCP/IP是可靠性传输协议,它能保证数据能按顺序的方式到达目的地.看到以上描述在写TCP/IP应用的时候似乎就可以放心了,只要程序不出意外就数据输传就是正确.但最近在做一个文件传输工作的时候确得到的结果并不是这样,发现网络环境和一次发送数据大会影响整个输传结果.以下是这两晚的测试情况
" U6 L9 z; Z& w& R: x$ c" D
! Y# P9 `# f6 K  测试内容描述:
: u/ M% n' Q4 |: Y0 E" }0 p8 m4 ~5 }2 a. T
  每个文件块信息包大概是120k左右/ M" p" V7 @4 `% E+ E

- n/ W+ x- m( z: g  S1 w  采用异步5连接输传,双方的Socket.SendBufferSize和Socket.ReceiveBufferSize都设置为64K. z- O2 l+ z0 q/ Z, U$ h$ Z1 a& V

5 C" ^8 D* K. u/ u' g  测试服务器分别有:
9 ^; b) |. s4 _* L# F2 c. m2 g& {& b& W* i
  局域网:ServerA
% D# L) h1 D9 w8 c5 t3 S5 ~- v# i, Q$ G4 `, d2 x: S
  在美国机房:ServerB 延时高,Ping有时会超时# c+ K; Z" X3 {* ^9 D

% h# V+ h9 y& Q& m' U/ C  测试client一台,通过ADSL上网.
. U  }* x) f/ \! F7 |' T8 i' p$ K4 q8 M* h$ p" s) A3 ]
  以下是Client从Sever下载文件的情况:" x7 a/ }0 |/ V- R
$ K* x( d5 o8 F, c. H
  服务器8K SendBuffer,客户端是8K ReceiveBuffer
+ E$ A+ w5 f1 j0 Y" v5 J, b( e- s6 c. w
  从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.
2 I6 i  c6 Q' x9 R- _, v5 w  Y' k) C& w0 B& T" ^4 X/ w! x
  从ServerB下载文件,分别下载多个文件,几M或更小的文件有部分正确,大文件基本都是错误.两端记录的发送的字节数和接收的字节相等,符合文件大小,程序也没有跟踪到数据接收异常导致的协议分解错误.# ^+ p( i- @5 W. c

8 T* w- m0 K3 a: }' N' c6 k  服务器4K SendBuffer,客户端8K ReceiveBuffer
: g" v6 w8 h3 r
& m* W( l( h' @  从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.
" P, g% t' y- p
: p0 O/ T# b0 b2 v1 b; }5 a  从ServerB下载文件,分别下载多个文件,文件的正确率比较高,不过还是大文件相对错误比较多.当开启迅雷下载后情况就开始变坏,大部分接收到的文件都出问题,两端记录的发送的字节数和接收的字节相等,符合文件大小,程序也没有跟踪到数据接收异常导致的协议分解错误
' {1 [' K6 m, Q4 {
, t# K4 ~# b7 A0 J( U0 d9 m# m  服务器2K SendBuffer,客户端8K ReceiveBuffer
8 ]1 `7 d; Q+ C
1 R! S5 _; i) v' }; U/ b4 ?  从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.
2 X3 d  t1 P% ^; L6 P( u: M! b; ]  C% z% O. K0 f! Y
  从ServerB下载文件,分别下载多个文件,下载结果没有发现错误文件.当开启迅雷下载后还是有个别文件错误,两端记录的发送的字节数和接收的字节相等,符合文件大小,程序也没有跟踪到数据接收异常导致的协议分解错误
; x/ V) p8 y: _7 B% Y4 l( n7 Y3 g
  服务器1K SendBuffer,客户端8K ReceiveBuffer
1 C2 x: M. x+ u* X7 q5 l9 `# Z3 T- j+ }" A+ I8 o
  从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.9 E; W3 g' h: ]% p
) c# v  P4 C  J7 c; ]
  从ServerB下载文件,分别下载多个文件,下载结果没有发现错误文件.当开启迅雷下载后没有发现文件错误.
; l1 X# T# ~2 r. N! N1 e' X, {, J  g* k$ c* J# h% B
  测试文件发送到Server和下载的情况基本差不多,这说明了在网络不好的情况处理发送大数据包似首容易产生错误,但看TCP/IP协议讲解这情况似乎不存在,因为当一个发送数据超过某个值的时候,TCP会划分块进行传输并保证其顺序.但网络不好的情况测试结果接收的数据有错误,但处理的数据大小是正确的,也并没影响整个协议的分解.由于对CP/IP协议、低层和路由处理的不了解,暂没找到具体原因。。。不排除程序存在还没发现的错误,打算给发送的文件数据加上校验再测试一下看情况
- M) ^4 n% \+ B" U# a) |5 \: P* W! h* U+ u
  补充一下
' h; M  O* r, A/ J- b
$ T! m9 n1 z* X- {+ o% b$ g  以上测试只修改了一个属性# o" O" S, w0 Z1 s! c; C+ f1 B
$ d# e2 _) z8 ]& V+ ?
  TcpUtils.SendBufferLength = 1K,2K,4K,8K0 x8 i- y. Q) t" J3 ?

  b9 o/ A) \# K4 l# R* ^  但只有1K的测试结果奇怪地没出现文件错误,其了几中均出现仅仅是对ServerB,对ServerA来说没有出现,2K,4K也只是开启迅雷的时候错误情况多.+ x7 ]4 R; F. C
湖盟云防火墙
4 p" B0 ^! Q, `- X* l, E6 X  B2 w- z( y3 Z
回复

使用道具 举报

夜已深 发表于 2026-03-13 13:24:56 | 显示全部楼层
楼主辛苦了,整理这么多内容,必须点赞收藏
回复 支持 反对

使用道具 举报

    您需要登录后才可以回帖 登录 | 加入怎通

    本版积分规则

    QQ|手机版|小黑屋|网站地图|真牛社区 ( 苏ICP备2023040716号-2 )

    GMT+8, 2026-4-28 01:40 , Processed in 2.729370 second(s), 50 queries , Gzip On.

    免责声明:本站信息来自互联网,本站不对其内容真实性负责,如有侵权等情况请联系420897364#qq.com(把#换成@)删除。

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表