gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:45:19 26 4
gpt4 key购买 nike

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

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

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

它们是如何发送的?最后一个是第一个发送的吗?或者是第一个?我认为接收非常简单 - 出现的第一个字节位于缓冲区中的第一个空闲位置。

我认为我制作的一张小图片很好地表达了我的意思。

sending over tcp

最佳答案

它们的发送顺序与它们在内存中的顺序相同。否则会更复杂......如果你有一个连续的字节流,你会怎么做?等最后一个发完了然后全部reverse?或者这种反转应该“逐个数据包”地工作?因此,每个 2k 字节的 block (或 TCP 数据包的大小)在内部是颠倒的,但数据包的顺序是“正确的”?

Receiving, I think, is quite easy - first byte to appear gets on first free place in buffer.

到底为什么发送方应该反转字节而接收方不应该?如果你构建一个对称系统,要么两者都做一个 Action ,要么都不做!

请注意,真正的问题通常是字节序问题。您计算机上 int 的内存布局可能与另一台计算机上 int 的布局不同。因此,两台计算机中的一台可能必须反转 int 的 4 个字节。但是字节顺序是由“原始类型”解决的“原始类型”。由于历史原因,许多 Internet 协议(protocol)是 Big Endian,而 Intel CPU 是 Little Endian。甚至 TCP 的内部字段也是 Big Endian(参见 Big endian or Little endian on net?),但这里我们说的是 TCP 字段,而不是 TCP 协议(protocol)移动的数据。

关于C# 套接字发送和接收的字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30260190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com