如何在C中处理网络字节顺序

时间:2018-11-13 20:48:53

标签: c networking byte

我对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

1 个答案:

答案 0 :(得分:0)

首先要回答您的问题:

  

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

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

  

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

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

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

相关问题