日期:2014-05-17  浏览次数:21268 次

c# socket 数据包大小设置问题
本人socket新手,对数据包的大小设置没有概念,有没有合适的大小范围,可以更好的避免传输速度以及粘包丢包问题! 
开始定义的为 Byte[] _cmdBuff = new Byte[20]; 我从cline发送了一30.8k的文件,效率低的要命
重新设定大小为Byte[] _cmdBuff = new Byte[60000];  瞬间完事。。。。。。。。。。。。。。
抛开程序健壮性,数据包的大小定义有没有技巧!!!
    请大师们指点!
socket

------解决方案--------------------
什么话?

粘包是tcp的特点,因此tcp可以“慢启动”而避免像udp那样霸道地阻塞网络,你反而说成是问题?

至于丢包,我告诉你,如果你说tcp丢包,那么请检查你自己的代码。

对于服务器,我的buffer以前设置为400k,现在设置为2M。这些对程序正确性没有什么影响。实际上它只要与网络带宽适配的话,那么buffer越大效率越高。
------解决方案--------------------
你才设置了不到6k大小的buffer,“那个”很小哦。

应用程序层的buffer,跟最底层的什么buffer是两回事。不要照着底层的资料来设置业务应用层代码。请你从测试出发进行设计,不要从理论出发。
------解决方案--------------------
6k  -->  60k
------解决方案--------------------
用tcp协议,是不会“丢包”的。
------解决方案--------------------
打个不恰当的例子,new Byte[6000],里面的数组长度的大小就像一个马路一样,越大表示马路越宽,同时通过的车辆就越多。至于这个值究竟多大最适合,跟网络情况有关,并没有一个固定的值。
------解决方案--------------------
在内存满足的情况下,一般根据需求来决定buffer的大小。