首页 > 解决方案 > 如何在C中处理网络字节顺序

问题描述

我有一个关于 C 和字节顺序的问题。我正在编写一个接收消息的小型 TCP 服务器。但是,我无法接收消息。我只能找到传输字符串的 TCP 示例。但是,我的消息包含单个切换位。

recv(socketClient, buffer, strlen(buffer), 0);

我特别问以下问题:我需要什么类型来初始化缓冲区以及如何处理它(将其拆分为不同整数的数组,即。)

我目前的字符串方法:

int max_size = 512;

char buffer[max_size];// buffer to read server message
memset(buffer, ' ', sizeof(buffer)); //fill buffer memory with an empty char

标签: cnetworkingbyte

解决方案


先回答你的问题:

我需要用什么类型来初始化缓冲区

通过“类型”,我假设您实际上需要值,就像您初始化缓冲区一样。要回答 - 您根本不需要用某种已知值填充它。函数的返回值recv告诉你你收到了多少字节。该数量内的所有内容都是有效数据,您可以将其他所有内容视为垃圾并可以使用剩余空间来例如以空值终止字符串。假设您当然只传输字符串。

然后我该如何处理它(将其拆分为不同整数的数组,即)

这就是协议和序列化方法处理的内容。这些告诉您诸如发送数据的顺序,如何解释它,以及告诉您如何将程序保存的数据转换为字节缓冲区(参数为send),然后如何将其转换回来以得到相同的东西转换前的数据(从 读取recv)。

现在进一步详细说明,考虑到问题中给出的有限数据:除非您与您知道使用某种协议(例如 HTTP)的主机交换数据或以某种已知格式(例如 JSON)传输数据,因此可以使用某种类型库为您完成这项工作,您自己实现序列化和反序列化。简而言之-您必须知道远程端如何将其发送的数据转换为字节缓冲区,并且您以相反的顺序执行相同的操作。假设您与连接的主机在同一个平台上,您可以使用非常快速的概念验证,memcpy但我不推荐它. 你如何去做这完全取决于你。我个人建议研究数据序列化的主题,从简单的示例开始,逐步建立。这样的主题太广泛了,即使在一个答案中以最小的形式也无法解释。


推荐阅读