繁体   English   中英

套接字发送和接收的C#字节顺序

[英]C# order of bytes sent and received by socket

我想知道TCP套接字发送/接收字节的顺序。

我已经实现了套接字,它可以正常工作,所以很好。 我还有一个叫做“消息”的东西-它是一个字节数组,其中包含字符串(序列化为字节)和两个整数(转换为字节)。 它必须像这样-项目规格:/

无论如何,我想知道它如何处理字节:在字节数组中,我们具有字节顺序-0,1,2,... Length-1。 他们坐在记忆中。

他们如何发送? 最后一个是第一个发送吗? 还是第一个? 我认为接收是很容易的-出现的第一个字节进入缓冲区的第一个空闲位置。

我认为我拍的一张好照片可以说明我的意思。

通过TCP发送

它们以与内存中相同的顺序发送。 否则会更复杂...如果您有连续的字节流怎么办? 等待最后一个已发送,然后全部撤消? 还是这种反演应该“逐个分组”地工作? 因此,每个2k字节的块(或TCP数据包的大小)在内部都被反转了,但是数据包的顺序是“正确的”吗?

我认为接收是很容易的-出现的第一个字节进入缓冲区的第一个空闲位置。

为什么在地球上,发送方应该反转字节而接收方不应该反转字节? 如果构建对称系统,则两者都将执行操作或不执行操作!

请注意, 真正的问题通常是字节序之一 一个的内存布局int您的计算机上可能会比一个的布局不同int另一台计算机。 因此,两台计算机之一可能不得不反转int的4个字节。 但是字节序是可以通过“原始类型”解析为“原始类型”的东西。 由于历史原因,许多互联网协议都是Big Endian,而Intel CPU是Little Endians。 甚至TCP的内部字段都是Big Endian(请参见net上的Big endian还是Little endian? ),但是在这里,我们所说的是TCP的字段,而不是TCP协议移动的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM