想请问一下各位你们是如何避免服务器与客户端之间的信息交互的

想请教一下各位你们是如何处理服务器与客户端之间的信息交互的?
最近在写一套程序,遇到个交互方面的问题想请教更有经验的人
现在的情况是这样的:程序为C/S结构
C向S随时发送一些命令O,S给C返回数据O',O'之后还可能包含一段额外的数据;
S也可能不定时向C发些信息M

现在问题是怎么保证M不会夹在O和O'之间,或者是夹在数据之间,避免客户端对O'和M的响应混乱?

我采用的命令信息基本都是采用统一的结构体,其中有字段表示这一帧代表着什么命令

------解决方案--------------------
探讨
最近在写一套程序,遇到个交互方面的问题想请教更有经验的人
现在的情况是这样的:程序为C/S结构
C向S随时发送一些命令O,S给C返回数据O',O'之后还可能包含一段额外的数据;
S也可能不定时向C发些信息M

现在问题是怎么保证M不会夹在O和O'之间,或者是夹在数据之间,避免客户端对O'和M的响应混乱?

我采用的命令信息基本都是采用统一的结构体,其中有字段表示这一帧代表着什么命令

------解决方案--------------------
方法2可行,可以加强一点,做成通信协议。

数据标记+报文序号+数据长度+校验值
------解决方案--------------------
你可以用信息头+信息+信息尾+校验 这样的格式来规划协议,

头尾用长一点的字符,不要用\0和m这样的短字符

------解决方案--------------------
你所担心的可能是这个问题吧:
在多线程的环境下,如果服务器端对同一个客户端socket进行send操作(有些可能是来自对这个客户端消息的处理;有些可能是来自于服务器端主动发起的操作,比如定时),那么这些send操作发送的消息,是否会错乱(混杂在一起)。
这一点你大可放心,windows没有这么差劲的,你一次send发送的数据包是会保证完整性的传递给对方的,从而不会出现你担心的那个情况。

至于如何处理消息,因为tcp流是*的,所以对于二进制的消息一般采用 header+body 的方式构造消息,而header采用固定大小的 type+length 结构(当然要扩充header,增加诸如checksum之类的也未尝不可),然后在接收方按照约定好的结构对消息进行处理即可。