# gobstream **Repository Path**: rocket049/gobstream ## Basic Information - **Project Name**: gobstream - **Description**: 利用go语言gob编码格式,在一个TCP连接上同时进行多路流式数据传输和文件传输 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-10 - **Last Updated**: 2025-06-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # gob流式数据传输和文件传输 基础协议:tcp 利用go语言gob编码格式,在一个TCP连接上同时进行多路流式数据传输和文件传输。 ## 一、文件 发送方先发送文件头,指定Session,然后顺序发送数据块;接收方根据文件头Session接收文件。 ### 文件头 ``` struct { Typ string Name string Mode uint32 Session uint32 } ``` * Typ: 字符串:`file` ### 数据块 ``` struct { Typ string Session uint32 Status string Format string Data []byte } ``` * Status: 空字符串表示正在传输;`end`表示结束,此时`Format`和`Data`都应该是空。 * Typ: `filedata` * Format: raw/gz * Session:程序根据数据块的 Session 判断对应的文件头 ## 二、数据 根据指定Session,发送数据,可以单独发送数据快,也可以分段发送。 ### 数据头 ``` struct { Typ string Status string Session uint32 Format string Data []byte } ``` * Typ: `streamdata` * Status: `start`长数据块的第一个;`alone`单独数据块 ### 数据块 ``` struct { Typ string Status string Session uint32 Format string Data []byte } ``` * Typ: `streamdata` * Session: 和数据头一样 * Status: 空字符串 ### 数据尾 ``` struct { Typ string Status string Session uint32 } ``` * Typ: `streamdata` * Status: `end` * Session: 和数据头一样 ## 统一数据结构 ``` struct { Typ string Session uint32 Status string Name string Mode uint32 Format string Data []byte Ext uint32 } ``` * Ext:供程序自定义的扩展信息 ## 一些常量 ``` const ( // status StatusAlone = "alone" StatusStart = "start" StatusEnd = "end" StatusEmpty = "" // type TypStream = "streamdata" TypFileHead = "file" TypFileData = "filedata" ) ``` ## v1.2.0 的改进 新增方法: ``` func (stream *StreamConn) BeginReader() (res chan *StandaloneData, err error) ``` BeginReader() 返回一个管道,调用该方法后,程序开始在后台解析接收到的数据包,把数据还原为 byte[] 数据或文件,用户可以反复从返回的管道读取 StandaloneData 数据。 对应的数据结构和常量: ``` // StandaloneData 经过处理后的完整数据的统一数据结构 type StandaloneData struct { Typ string // 可能有三种值:file/byte Session uint32 // 用数字代表不同的通道 FileName string // 文件完整路径,对应 file 类型 Bytes []byte // 二进制内容, 对应 byte 类型 Ext uint32 // 供程序自定义的扩展信息 } // 对应 StandaloneData 的两种数据类型的常量 const ( DataTypeFile = "file" DataTypeByte = "byte" ) ``` 具体用法在新增样例 `server2` 中。