Tcp 10025是分配字节[]的特殊值吗
我在一些TCP通信代码中多次看到以下行:Tcp 10025是分配字节[]的特殊值吗,tcp,Tcp,我在一些TCP通信代码中多次看到以下行: byte[] bytesFrom = new byte[10025]; 因此,我想知道这个10025值是否有特殊原因,或者它只是任意选择的 谢谢据我所知,10025没有任何具体含义。这可能是不知道如何使用缓冲区的人随机调整的结果(嘿,我收到了一个10000 B的数据包,我没想到,让我增加缓冲区大小…) 较少的任意值为: 通常使用二的幂,因为它们在计算(基于二进制数)时非常方便。因此,您经常会看到缓冲区大小,如256或4096 65536-除了是2的幂
byte[] bytesFrom = new byte[10025];
因此,我想知道这个10025值是否有特殊原因,或者它只是任意选择的
谢谢据我所知,10025没有任何具体含义。这可能是不知道如何使用缓冲区的人随机调整的结果(嘿,我收到了一个10000 B的数据包,我没想到,让我增加缓冲区大小…) 较少的任意值为:
- 通常使用二的幂,因为它们在计算(基于二进制数)时非常方便。因此,您经常会看到缓冲区大小,如
或256
4096
-除了是2的幂外,它还是TCP有效负载的最大大小,没有窗口缩放(这可能会将有效负载大小增加到1 GiB的疯狂值-这是一个大数据包)65536
- 有效载荷的实际已知最大尺寸。如果有效负载大小明显小于通常的缓冲区大小,则这可能很有用。例如,如果您知道可以接收的最大有效负载是100B,那么您可以使用100B的字节数组,甚至可以毫无问题地重用它(前提是您不在任何地方引用缓冲区,但无论如何都不应该这样做)
-这通常是默认的TCP发送缓冲区大小(如果发送的数据小于此值,TCP将等待一段时间(比如200ms),然后再发送“不完整”的缓冲区;如果您正在向网络流写入单个字节而不首先对其进行缓冲,则TCP可以相对良好地工作)。因此,发送4kib数据包意味着将立即发送前2920b,而剩余1176b将等待200ms的“超时”。不考虑这一点可能会导致严重的延迟,即使网络实际上根本不忙1460
新字节[10025]
代码段上有这么多谷歌搜索结果。我想知道这个值是从哪里来的,因为很明显,很多人只是盲目地复制它,根本不理解它,下面的代码段就是最好的证明:
byte[] inStream = new byte[10025];
bufferSize = clientSocket.ReceiveBufferSize;
serverStream.Read(inStream, 0, bufferSize);
为什么要分配一个10 025字节的缓冲区,然后只向其中读取
ReceiveBufferSize
字节?更不用说如果ReceiveBufferSize
(这与发送的数据无关)大于10 025 B,您可能会得到一个越界错误。如果您根本不关心ReceiveBufferSize
(您可能不应该这么做),为什么不创建一个新字节[clientSocket.ReceiveBufferSize]
首先是缓冲区?在我看来是任意的……但在上下文中它可能是有意义的。这个“一些代码”是从哪里来的?有趣的是,我在谷歌上搜索了一下,有一个同样大小的缓冲区的问题:可能开发人员住在纽约,因为10025是纽约的邮政编码:-)@Sean有更多这样的问题。你认为他们中有多少人是从复制别人的项目开始的@肖恩:这是一段糟糕的网络代码:D这可能是一段又一段被复制的代码,而不了解它的实际功能。@taktak004我在谷歌搜索结果中看到了类似的花絮。我惊呆了:D