社区
网络编程
帖子详情
socket做网络传输,数据封装一下,开始字符和结束字符用哪个比较好?
zhllxt
2009-01-13 10:03:43
比如我想做个网络聊天程序,我想对数据封装一下,第一个字节代表数据开始,第二个字节是消息类型。。。等等等,最后一个字节代表数据结束。我的问题是第一个字节(即数据开始字节)和数据结束字节用哪个字符比较好,比如说我把开始字符用“~"代表,在消息中找到"~"就代表数据开始了,但是用户要是在聊天内容中就包含了"~"这个字符就有点不太好了,所以用哪两个字符代表开始和结束字符比较好呢。
...全文
398
11
打赏
收藏
socket做网络传输,数据封装一下,开始字符和结束字符用哪个比较好?
比如我想做个网络聊天程序,我想对数据封装一下,第一个字节代表数据开始,第二个字节是消息类型。。。等等等,最后一个字节代表数据结束。我的问题是第一个字节(即数据开始字节)和数据结束字节用哪个字符比较好,比如说我把开始字符用“~"代表,在消息中找到"~"就代表数据开始了,但是用户要是在聊天内容中就包含了"~"这个字符就有点不太好了,所以用哪两个字符代表开始和结束字符比较好呢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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等类似的通信软件他们的消息是怎么封装的。是不是和我们常用的封装格式一样。
14.3
Socket
字符
串分块
传输
首先为什么要实行分块
传输
字符
串,一般而言`
Socket
`套接字最长发送的字节数为`8192`字节,如果发送的字节超出了此范围则后续部分会被自动截断,此时将
字符
串进行分块
传输
将显得格外重要,分块
传输
的关键在于
封装
实现一个
字符
串切割函数,将特定缓冲区内的字串动态切割成一个个小的子块,当切割
结束
后会得到该
数据
块的个数,此时通过套接字将个数发送至服务端此时服务端在依次循环接收
数据
包直到接收完所有
数据
包之后在组合并显示即可。
2. C++
Socket
网络
数据
传输
的几种方式
2. C++
Socket
网络
数据
传输
的几种方式 C++
Socket
在进行
网络
数据
的传送时,
数据
一般是char类型的
字符
数组,除此之外还有一些方法可以传送我们自己定义的
数据
类型 自定义结构体 Json序列化 定义Class对象 1. 结构体 定义一个结构体,例如: struct DataPack { int age; string name; }; 在发送
数据
的时候对
数据
进行处理,将DataPack类型的指针强制转换成char类型指针,具体如下: DataPack da = { 20, "
在
socket
数据
传输
下 的缓冲流和
数据
流
昨天看了篇写的很棒的关于
socket
缓冲区的讲解。
socket
套接字及缓冲区详解@lx青萍之末 引自其博客。 上图反应的是客户端和服务端
数据
传输
的模式图,主要说明的是,客户端
socket
通过write()方法写出去后,并不是直接在
网络
中
传输
数据
,而是将
数据
写入缓冲区。然后内核协栈将缓冲区的
数据
通过TCP协议发送到对端主机的输入缓冲区(注意这个过程不受程序控制,因为将
数据
写入输出缓冲区时,函数已经返回)。
数据
从接收端的缓冲区输入程序缓冲区,这个过程由类似read的方法完成。 ...
python
网络
通信
传输
的
数据
类型_Python基础:
网络
编程
socket
基本篇
socket
也叫套接字,是对各种协议的
封装
,实现收发
数据
。Python里
socket
工作过程:(图片来自
网络
)
socket
在Python中实际上是一个模块,实现发送和接收
数据
的功能。因为
socket
是一个类,所以只导入模块需要使用
socket
.
socket
()创建一个
socket
对象。创建一个
socket
格式:
socket
(family=AF_INET, type=SOCK_STREAM, pro...
RS232和
socket
网络
通信中的
字符
串、整型
1.我们先要明确,通信中我们传递的是什么? 数字信号:010101 模拟信号:高低电平 我们想要发送
字符
串“YYDS” 我们需要找到
字符
串和0101数字信号对应
字符
串在储存时,需要转换成ASCII码,然后将ASCII储存。 “YYDS” 0x59 0x59 0x44 0x53 01011001 01011001 01000100 01010011 其中“1011001 1011001 1000100 1010011”便是YYDS的数字信号,当然,如果你想发一个int a = 188
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章