找回密码
 加入怎通
查看: 526|回复: 0

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

[复制链接]
Q18310195 发表于 2013-01-06 15:56:33 | 显示全部楼层 |阅读模式
TCP/IP是可靠性传输协议,它能保证数据能按顺序的方式到达目的地.看到以上描述在写TCP/IP应用的时候似乎就可以放心了,只要程序不出意外就数据输传就是正确.但最近在做一个文件传输工作的时候确得到的结果并不是这样,发现网络环境和一次发送数据大会影响整个输传结果.以下是这两晚的测试情况% }' ?4 B& B: @( ]- r: `3 \

7 n8 P1 U) [5 o& d8 b) Z5 i6 [  测试内容描述:4 z. U2 F* t8 s* z1 |; E
( `3 x. I9 S- N# o0 h- Y
  每个文件块信息包大概是120k左右1 f" \% ]1 ?  Z# \
) |% s. S5 L1 G0 U' R1 c
  采用异步5连接输传,双方的Socket.SendBufferSize和Socket.ReceiveBufferSize都设置为64K: j, a% I' W5 ~- a- Y2 x- d9 \

$ s5 |% w  [% N  测试服务器分别有:1 _+ x- s0 s1 o; |6 n
" e" B$ T& D: @
  局域网:ServerA- ?" a9 _4 s% `  f- f- _; ]
# f& N* d$ O) I3 o. K; c  r$ Y( Q
  在美国机房:ServerB 延时高,Ping有时会超时: q5 E6 [2 L# S$ W9 o, l

7 y- r: [$ P8 {  测试client一台,通过ADSL上网.& i' v5 f& t! P& Q2 f/ r& T. I% F

) S( H3 G, O* ~, t" n' A& m  以下是Client从Sever下载文件的情况:
5 ~& U& I2 N# P; q! C8 q* z: N0 o# C3 A4 {) P( H. T% z1 ^
  服务器8K SendBuffer,客户端是8K ReceiveBuffer
$ w, K# }5 T5 O" n$ Q3 ~! h) v  h; F3 i* h4 `, V! ~
  从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.' ?. j3 k% o/ p5 m$ C+ P3 \& d! J/ V
% ]" c+ {3 j) w: J. \
  从ServerB下载文件,分别下载多个文件,几M或更小的文件有部分正确,大文件基本都是错误.两端记录的发送的字节数和接收的字节相等,符合文件大小,程序也没有跟踪到数据接收异常导致的协议分解错误.6 }+ p/ o, H3 ^4 X

. e8 i5 }3 T* d6 Q5 s5 I: L$ ?  服务器4K SendBuffer,客户端8K ReceiveBuffer! _0 u( |5 I6 `* |5 ]+ e! W( F  C& ]. F
+ K. Y( a# l8 b( S: k! F) X
  从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.
( F0 _" Z" n- ^2 q" q3 F
4 I# A3 c9 Z4 s  }; a  从ServerB下载文件,分别下载多个文件,文件的正确率比较高,不过还是大文件相对错误比较多.当开启迅雷下载后情况就开始变坏,大部分接收到的文件都出问题,两端记录的发送的字节数和接收的字节相等,符合文件大小,程序也没有跟踪到数据接收异常导致的协议分解错误
  ~  I  ~  n/ z8 z, R/ D! ^2 z2 w6 E1 q7 a% P1 N
  服务器2K SendBuffer,客户端8K ReceiveBuffer
! i" j& u0 l5 Y! G% v7 M" m4 Z5 I1 N
  从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.! L8 ]) `* b3 j4 d1 l% m
$ Q, V7 ]8 n( D. \6 C
  从ServerB下载文件,分别下载多个文件,下载结果没有发现错误文件.当开启迅雷下载后还是有个别文件错误,两端记录的发送的字节数和接收的字节相等,符合文件大小,程序也没有跟踪到数据接收异常导致的协议分解错误; C8 ?: ], k, O" s
* j+ p) L2 A$ i4 x( X0 N  R% N# i
  服务器1K SendBuffer,客户端8K ReceiveBuffer
) s; s; |/ K6 ^0 Y/ m5 ?' H. X4 f2 h/ G
  从ServerA下载文件,分别下载多个文件几M到几百M不等,下载后文件正确.
" a! b, \* o. P! K% M
4 B8 U) p) G1 `9 d5 ~+ [  从ServerB下载文件,分别下载多个文件,下载结果没有发现错误文件.当开启迅雷下载后没有发现文件错误.
8 i  R" a! p/ t/ h& F9 t1 R' M4 W
0 [( ~! F/ q1 R  测试文件发送到Server和下载的情况基本差不多,这说明了在网络不好的情况处理发送大数据包似首容易产生错误,但看TCP/IP协议讲解这情况似乎不存在,因为当一个发送数据超过某个值的时候,TCP会划分块进行传输并保证其顺序.但网络不好的情况测试结果接收的数据有错误,但处理的数据大小是正确的,也并没影响整个协议的分解.由于对CP/IP协议、低层和路由处理的不了解,暂没找到具体原因。。。不排除程序存在还没发现的错误,打算给发送的文件数据加上校验再测试一下看情况6 D% R5 i& v4 s! B( B6 Z% ~

% r+ l! [+ O2 y0 n+ l2 ]  {; H  补充一下) q6 w3 i" ^$ i
( B1 a& k5 ~) a( x% ]5 a
  以上测试只修改了一个属性
  E. [) \" Q5 t6 M. f$ Q6 B8 j
# }0 b7 {& Q) M- W( J& l  TcpUtils.SendBufferLength = 1K,2K,4K,8K3 J' w+ h" Z- z! B3 N

0 Y& I5 E# I* R4 O- D7 @# t  但只有1K的测试结果奇怪地没出现文件错误,其了几中均出现仅仅是对ServerB,对ServerA来说没有出现,2K,4K也只是开启迅雷的时候错误情况多.
/ p1 D6 ^0 _' F! Z. d# R湖盟云防火墙$ b* R7 x9 t( Q9 B9 h! s/ V( m, X* M
+ V4 {$ S- \. g( F/ j8 n1 ?- Z
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-3-13 13:24 , Processed in 0.480719 second(s), 51 queries , Gzip On.

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

    Powered by Discuz! X3.5

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