一种基于文件共享协议的跨平台数据即时传输方法_2

文档序号:9931320阅读:来源:国知局
3、可双向传输,使得数据传输及回传成为可能,极大减少了人工操作的复杂程度;4、封装指令丰富且可扩展,可以根据业务需求自主定义传输的指令和操作。
【具体实施方式】
[0067]为使本发明的目的、技术方案及优点更加清楚明白,以下参照实施例,对本发明做进一步详细说明。
[0068]目前数据传输需求的平台主要为Windows、Linux以及android。针对但不限于以上三种主流平台,本发明提出了一种跨平台数据即时双向传输的解决方案。该解决方案主要技术如下:
[0069]1、自主分析了SMB协议的结构和规范,在此基础上对依赖TCP协议的SMB协议进行二次定义。
[0070]2、根据二次定义的SMB协议,对通用的数据传输接口及指令进行定义,使基于上述三种主流平台之外的平台能够很快应用该传输方法。
[0071 ] 3、分别对Android平台、Windows平台及Linux平台研发了符合既定传输接口及指令的数据传输模块。
[0072]实施例:以上提出的解决方案主要由一下几个关键操作步骤完成:
[0073]1、SMB协议分析及依赖TCP的二次定义;
[0074]2、通用传输接口及指令定义;
[0075]3、Windows平台通用实现方式;
[0076]4、Android平台通用实现方式;
[0077]5、Linux平台通用实现方式。
[0078]针对以上描述的关键操作步骤进行细化如下:
[0079]ISMB协议解析及依赖TCP的二次定义
[0080]1.1SMB协议解析
[00811 SMB(Server Message Block)是微软与英特尔在1987年制定的协议。该协议最初是一个微软产品专用的网络通讯协议。该协议在会话层(sess1n layer)、表示层(presentat1n layer)以及部分应用层(applicat1n layer)上的协议。基于它的可扩展性,本发明可以通过对应用层协议进行重构,以完成本发明所描述之跨平台传输的协议需求。
[0082]SMB有协议头(SMB Header)和协议指令(SMB Command)两个关键部分。
[0083]1.2SMB协议二次定义
[0084]1.2.1SMB Header 二次定义
[0085]在结构体中添加PLATFORM字段用于定义平台信息,有0x01,0x02,0x09三个值。分别对应三种通用平台。
[0086]1.2.2SMB Command二次定义
[0087]对SMB协议原有的指令进行重定义以及扩展如下:
[0088]定义NEGOTIATE指令,用于与目标平台初次沟通。
[0089]定义SESS10N_SETUP指令,初始化已建立连接,并获取到协商一致的连接信息。
[0090]定义TREE_C0NNECT指令,获取权限范围内的目录信息。
[0091 ]定义CREATE指令,用于创建数据传输目录及数据文件。
[0092]定义OPEN指令,用于打开数据源。
[0093]定义READ指令,用于读取数据源中的数据。
[0094]定义WRITE指令,用于向目标数据源写入数据。
[0095]定义CLOSE指令,用于结束所有操作。
[0096]定义DISCONNECT指令,用于断开连接,释放资源。
[0097]2通用传输接口及指令定义
[0098]以上对SMB协议进行的重定义,均以TCP协议为基础。
[0099]接口定义通用,但在各系统中的具体实现有差异。具体差异在各系统中具体的实现部分进行描述。
[0100]2.1创建连接
[0101 ] Get_connect1n,用于获得两平台间的通讯链路。
[0102]2.2初始化SMB连接
[0103]Init_SMB_Connect1n,利用NEGOTIATE与SESS10N_SETUP指令与目标平台的SMB协议进行沟通并获得有效SMB连接信息。
[0104]2.3获取目标平台可操作目录
[0105]Get_Target_path,利用TREE_C0NNECT指令获取有效的操作路径及目录列表。
[0106]2.4创建目标平台文件
[0107]Get_Target_Input_Stream,利用CREATE指令在目标平台上创建目标文件或文件夹。对文件夹,获得一个目标平台的输入流。
[0108]2.5开启目标数据源
[0? O9] Get_Target_Output_Stream,传入目标路径,利用OPEN指令开启文件,并获得一个目标平台上输出的数据流。
[0110] 2.6读取目标数据源数据
[0?11 ] Read_Target_Data,通过READ指令从数据流中获得数据。
[0112]2.7向目标数据源写入数据
[0113]Write_Target_Data,通过WRITE指令向数据流中写入数据。
[0114]2.8关闭所有数据流
[ΟΙ15] Close_Stream,通过CLOSE指令关闭与目标数据源的所有数据流。
[0116]2.9断开连接
[0117]Disconnect,通过DISC0NNECT指令释放与目标平台的SMB连接及TCP连接,并释放相关资源。
[0118]3Windows平台通用实现方式
[0119]由于微软全系列操作系统均支持SMB协议,因此本方案中Windows平台的实现直接采用Windows的文件共享机制。在这个机制的基础上,本方案在应用层进行了必要的基础操作封装。
[0120]3.1Windows平台上数据connect流程
[0121 ] 该流程即为windows与其他平台或windows平台创建SMB连接的流程。
[0122]3.1.I创建socket连接
[0123]3.1.2 调用GetSMBConnect1n 函数
[0124]该函数用于创建基于TCP的SMB连接。参数为具体的SMB连接的连接信息及获取到的socket连接。
[0125]3.I.3调用GetTargetPath函数
[0126]该函数用于获取目标平台的可操作目录。
[0127]3.2Windows平台上数据push流程
[0128]该流程即为windows向其他平台或windows平台主动推送信息的流程。
[0129]3.2.I调用GetInputStream函数[O13O]该函数用于获取一个本地输入流,参数为connect1n的句柄。
[0131 ]3.2.2 调用GetOutputStream 函数
[0132]该函数用于获取一个远程输出流,通过该流可以向指定的文件写入信息,参数为远程文件的SMB路径。
[0133]3.2.3循环调用Read函数
[0134]该函数用于不断读取文件数据。
[0135]3.2.4循环调用Write函数
[0136]该函数用于向流中写入数据。
[0137]3.2.5 调用Close 函数
[0138]该函数用于关闭流,并做文件保存工作。
[0139]3.3评;[11(10¥8平台上数据口1111流程
[0140]该流程即为windows从其他平台或windows平台主动获取数据的流程。
[0141]3.3.I调用GetInputStream函数
[0142]该函数用于获取一个远程输入流,参数为connect1n的句柄。
[0143]3.3.2 调用GetOutputStream 函数
[0144]该函数用于获取一个本地文件输出流,通过该流可以向指定的文件写入信息,参数为本地文件的绝对路径。
[0145]3.3.3循环调用Read函数
[0146]该函数用于不断读取流中的数据。
[0147]3.3.4循环调用Write函数
[0148]该函数用于向本地文件写入数据。
[0149]3.2.5调用Close 函数
[0150]该函数用于关闭流,并做文件保存工作。
[0151 ]3.3Windows平台上结束操作断开连接流程
[0152]3.3.I调用Disconnect函数
[0153]该函数用于释放连接。
[0154]3.3.2 调用底层 socket 的disconnect 函数[ΟΙ55]该函数用于释放底层socket连接。
[0156]4Linux平台通用实现方式
[0157]大部分Linux平台支持原生的SMB协议。
[0158]对于支持原生SMB协议的系统,其实现方式与操作流程与Windows平台一致。
[0159]对于不支持源生SMB协议的Linux系统,可以通过以下流程使SMB服务生效,然后使用与windows无异
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1