Go1.7.3一个收发消息的小接口
来源:互联网 发布:淘宝第三方提供服务 编辑:程序博客网 时间:2024/06/06 10:50
package transportimport ( "encoding/binary" "errors" "io" "math" "sync")const ( sizeLen = 5 //设置消息多少字节大小,1<<4*8-1长度,最后一个字节用来做消息分割的,防止恶意链接)var ( ErrLength = errors.New("message too large") ErrHeader = errors.New("message head error"))//添加数据头并发送func SedMsg(w io.Writer, p []byte) error { msglen := len(p) if msglen > math.MaxUint32 { return ErrLength } var buf = make([]byte, sizeLen+msglen) binary.BigEndian.PutUint32(buf, uint32(msglen)) copy(buf[sizeLen:], p) _, err := w.Write(buf) return err}//从数据流中根据头长度读取完整的消息func RcvMsg(r io.Reader, lock sync.Locker) ([]byte, error) { lock.Lock() defer lock.Unlock() var header [sizeLen]byte if _, err := io.ReadFull(r, header[:]); err != nil { return nil, err } if header[sizeLen-1] == 0 { length := binary.BigEndian.Uint32(header[:]) if length == 0 { return nil, nil } msg := make([]byte, int(length)) if _, err := io.ReadFull(r, msg); err != nil { if err == io.EOF { err = io.ErrUnexpectedEOF } msg = msg[:0] return nil, err } return msg, nil } return nil, ErrHeader}
1 0
- Go1.7.3一个收发消息的小接口
- Go1.9组播发送消息小实例
- Go1.7.3简单的ftp协议交互
- C#实现消息的收发
- 基于netty的客户端和服务器收发消息的小程序
- 消息收发
- 如何创建一个利用UDP实现消息收发功能的MFC程序
- 手工消息断点的一个小例子
- 一个串口的收发器;
- 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:小技能 SmallDatetime)
- 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:小技能 DeleteMark)
- 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:小技能 SmallDatetime)
- 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:小技能 DeleteMark)
- 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:小技能 SmallDatetime)
- 基于UDP的简单收发消息代码
- 收发传真包的消息交互
- 使用spring集成的kafka收发消息
- TCP 接收连接及消息的收发
- SourceTree提交项目到github
- 浏览器中搜索与高亮文本
- html5移动端图片剪切上传 以及修改file标签样式
- android与单片机通信遇到有符号数和无符号数的转换问题简析
- Linux如何让进程在后台可靠运行?
- Go1.7.3一个收发消息的小接口
- angular 监控数据模型变化的事件方法$watch
- Cookie 和 Session 详细解析
- 17 - 02 - 27 图解HTTP(01)
- Java六大设计原则-依赖倒置原则
- 【sqlServer】唯一约束字段过长的问题及后续库表设计的反思
- 实习——从数据库对某一机组table选50测点另存table
- (4.1.45.1)RecyclerView 添加头部和尾部布局 一
- 深度学习笔记