如何在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

首先回答您的问题:

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

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

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

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

现在进一步阐述一下,考虑到问题中给出的有限数据:除非你与一个你知道使用特定协议(例如HTTP(或以某种已知格式传输数据(例如JSON(的主机交换数据,因此可以使用某种库为你做这项工作,否则你可以自己实现序列化和反序列化。简而言之,您必须知道远程端是如何将发送的数据转换为字节缓冲区的,然后按相反的顺序执行相同的操作。假设您与连接的主机在同一平台上,为了快速验证概念,您可以使用memcpy,但除此之外,我不建议使用它。你怎么做完全取决于你自己。就我个人而言,我建议研究一下数据序列化的主题,从简单的例子开始,然后构建自己的方法。这样的主题太宽泛了,即使用一个简单的答案也无法解释。

最新更新