我对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
答案 0 :(得分:0)
首先要回答您的问题:
我需要使用什么类型来初始化缓冲区
通过“类型”,我假设您实际上需要值,如初始化缓冲区所用的那样。要回答-您根本不需要用某种已知的值填充它。 recv
函数的返回值告诉您已收到多少字节。在此数量之内的所有内容都是有效数据,您可以将其视为垃圾的所有其他内容,并可以使用剩余空间来对字符串进行null终止。假设您只转移了字符串。
然后我如何处理它(将其拆分为不同整数的数组)
这就是协议和序列化方法要处理的内容。这些告诉您诸如发送数据的方法,如何解释数据的方法,以及告诉您如何将程序保存的数据转换为字节缓冲区(参数为send
)以及如何转换数据返回以获取与转换之前相同的数据(从recv
读取)。
鉴于问题中给出的有限数据,现在进一步详细说明:除非与已知使用某种协议(例如HTTP)的主机交换数据,或者以某种已知格式(例如JSON)传输数据,因此可以使用某种库为您完成这项工作,您就可以自己实现序列化和反序列化。简而言之-您必须知道远端如何将发送的数据转换为字节缓冲区,并以相反的顺序执行相同的操作。假设您与连接的主机位于同一平台上,则可以使用memcpy
快速进行概念验证,但除我不推荐以外,还可以进行其他操作。您如何做完全取决于您。我个人建议从简单的示例开始逐步学习数据序列化主题。这样的话题太宽泛,以至于即使以最小的形式在一个答案中也无法解释。