【问题标题】:How to process network byte order in C如何在C中处理网络字节顺序
【发布时间】:2018-11-13 20:48:53
【问题描述】:

我有一个关于 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

【问题讨论】:

标签: c networking byte


【解决方案1】:

首先回答您的问题:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 2019-07-18
    • 1970-01-01
    相关资源
    最近更新 更多