socket做网络传输,数据封装一下,开始字符和结束字符用哪个比较好?

zhllxt 2009-01-13 10:03:43
比如我想做个网络聊天程序,我想对数据封装一下,第一个字节代表数据开始,第二个字节是消息类型。。。等等等,最后一个字节代表数据结束。我的问题是第一个字节(即数据开始字节)和数据结束字节用哪个字符比较好,比如说我把开始字符用“~"代表,在消息中找到"~"就代表数据开始了,但是用户要是在聊天内容中就包含了"~"这个字符就有点不太好了,所以用哪两个字符代表开始和结束字符比较好呢。
...全文
398 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanfuliang 2011-04-17
  • 打赏
  • 举报
回复
应用序列化 方可解决问题
zhllxt 2009-01-14
  • 打赏
  • 举报
回复
大家知道类似QQ的比较常用的聊天工具他们的消息是怎么封装 的么?
wxy41_player 2009-01-14
  • 打赏
  • 举报
回复
建议楼主使用协议头+长度+数据+校验+协议尾的方式来通信,
协议头中可以放有关消息类型等信息,长度可以用来表示消息的总长度,
例如当收到一个长度为200字节的消息后可以先查找协议头在哪
然后在协议头后面偏移200个字节再查找是否具备消息尾,如果头尾齐全就可以再计算校验是否匹配,这样的协议应该是比较合理的.
Kernel_Don 2009-01-13
  • 打赏
  • 举报
回复
开始0xff
结束0xfe
caitian6 2009-01-13
  • 打赏
  • 举报
回复
typed struct NetMsg
{
int nMsgID;
int nMsgLen;
char szContext[nMsgLen]; // 这个nMsgLen 必须是确定的值, 不能是变量
}
blackcat242 2009-01-13
  • 打赏
  • 举报
回复
用长度吧,不要用符号
zhllxt 2009-01-13
  • 打赏
  • 举报
回复
这个用长度我也知道,但是我想把开始和结束字符做到用户根本就不可能输入的聊天内容正好是我的开始或结束字符,怎么办呢?
oyljerry 2009-01-13
  • 打赏
  • 举报
回复
定义一个字段表示数据的长度,自己收到后,截取对应数据
oyljerry 2009-01-13
  • 打赏
  • 举报
回复
用一个字段表示数据的长度,收到后,自己截取
wuyapu 2009-01-13
  • 打赏
  • 举报
回复
按道理,任何字符都可能在实际数据中出现
所以要防止这种情况就需要进行转义
就像html中的< > & 等这些符号

还有Base64等的编码都有这些目的

用长度是可行的,许多协议都是用的长度标记的
zhllxt 2009-01-13
  • 打赏
  • 举报
回复
看来大家对这个都没有细究哈,不知道QQ等类似的通信软件他们的消息是怎么封装的。是不是和我们常用的封装格式一样。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧