CN110413420A - 数据传输方法、装置、终端及存储介质 - Google Patents
数据传输方法、装置、终端及存储介质 Download PDFInfo
- Publication number
- CN110413420A CN110413420A CN201910064591.1A CN201910064591A CN110413420A CN 110413420 A CN110413420 A CN 110413420A CN 201910064591 A CN201910064591 A CN 201910064591A CN 110413420 A CN110413420 A CN 110413420A
- Authority
- CN
- China
- Prior art keywords
- data
- function
- server
- request
- client process
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 347
- 230000005540 biological transmission Effects 0.000 title claims abstract description 92
- 230000008569 process Effects 0.000 claims abstract description 286
- 230000006870 function Effects 0.000 claims description 152
- 230000004044 response Effects 0.000 claims description 58
- 238000004891 communication Methods 0.000 claims description 42
- 238000012545 processing Methods 0.000 claims description 25
- 230000015654 memory Effects 0.000 claims description 19
- 238000001514 detection method Methods 0.000 claims description 15
- 238000012544 monitoring process Methods 0.000 claims description 6
- 230000008901 benefit Effects 0.000 claims description 2
- 238000012546 transfer Methods 0.000 abstract description 8
- 238000012795 verification Methods 0.000 abstract description 7
- 238000010586 diagram Methods 0.000 description 12
- 230000007246 mechanism Effects 0.000 description 12
- 230000002093 peripheral effect Effects 0.000 description 10
- 238000013461 design Methods 0.000 description 3
- 230000004927 fusion Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 239000000919 ceramic Substances 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013497 data interchange Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/541—Client-server
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种数据传输方法、装置、终端及存储介质,属于网络技术领域。所述方法包括:当在原生层通过接收函数接收到来自客户端进程的连接请求时,对该连接请求进行验证;当对该连接请求验证通过时,如果存在第一数据,通过发送函数向该客户端进程发送该第一数据;如果存在该第二数据,通过读取函数读取该第二数据,对该第二数据进行响应。本发明通过在原生层接收到连接请求,对该连接请求进行验证,从而完成了对每个连接请求的鉴权校验,当对该连接请求验证通过时,与客户端进程实现数据传输,从而满足了原生层中不同进程之间的数据传输需求。
Description
技术领域
本发明涉及网络技术领域,特别涉及一种数据传输方法、装置、终端及存储介质。
背景技术
随着网络技术的发展,终端上配置有终端操作系统,终端操作系统为应用客户端分配处理资源,以使得应用客户端能够基于该处理资源,为用户提供不同的服务。其中,该应用客户端可以是终端上安装的任一应用客户端,例如即时通讯客户端、浏览器客户端、多媒体资源处理客户端等,该处理资源可以是提高CPU运行频率、提高GPU运行频率等。
在上述过程中,应用客户端在运行中需要创建至少一个进程,每个进程在运行过程中可以调用应用程序编程接口(application programming interface,API)以进行事件处理,终端操作系统以应用客户端所创建的每个进程为单位进行处理资源分配,每个进程都在各自的地址范围内运行,不同进程之间可以通过进程间通信(inter-processcommunication,IPC)机制来进行数据传输。其中,可供应用客户端调用的API可以分为java语言实现的java API以及C/C++语言实现的native API(原生API)。
目前,对不同终端上的进程而言,一般通过套接字(socket)实现IPC机制下的数据传输,套接字在将传输控制协议(transmission control protocol,TCP)/用户数据报协议(user datagram protocol,UDP)等通信协议封装后,向技术人员提供相对简单的javaAPI;而对同一终端上的进程而言,由于网际地址相同,没有必要执行套接字中的TCP/UDP协议栈,可以通过本地套接字(LocalSocket)接口实现IPC机制下的数据传输,也即是,将套接字封装在Unix域名空间中,向技术人员提供java语言实现的java API,从而避免了执行上述TCP/UDP等通信协议的协议栈。
然而,上述本地套接字为java语言实现,只能提供java层内IPC机制下的数据传输,而不能满足native层(原生层)内的C/C++语言实现的native API之间的数据传输需求。
发明内容
本发明实施例提供了一种数据传输方法、装置、终端及存储介质,能够解决native层内的native API之间的数据传输需求得不到满足的问题。该技术方案如下:
一方面,提供了一种数据传输方法,该方法包括:
当在原生层通过接收到函数接收来自客户端进程的连接请求时,对该连接请求进行验证;
当对该连接请求验证通过时,如果存在第一数据,通过发送函数向该客户端进程发送该第一数据,该第一数据为服务端进程待向该客户端进程所发送的数据;
如果存在第二数据,通过读取函数读取该第二数据,对该第二数据进行响应,该第二数据为来自该客户端进程的待该服务端进程所读取的数据。
一方面,提供了一种数据传输方法,该方法包括:
在原生层通过连接函数,向服务端进程发送连接请求,该连接请求中至少携带目标套接字地址;
当接收到来自该服务端进程的验证通过响应时,检测请求发送队列是否为空;
当该请求发送队列不为空时,确定存在第三数据,通过发送函数向该服务端进程发送该第三数据,该第三数据为客户端进程待向该服务端进程所发送的数据;
当该请求发送队列为空时,确定不存在该第三数据,调用选择函数,获取该选择函数的返回值;
当该返回值为正值时,确定存在第四数据,通过读取函数读取该第四数据,对该第四数据进行处理,该第四数据为来自该服务端进程的待客户端进程所读取的数据。
一方面,提供了一种数据传输装置,该装置包括:
验证模块,用于当在原生层通过接收函数接收到来自客户端进程的连接请求时,对该连接请求进行验证;
发送模块,用于当对该连接请求验证通过时,如果存在第一数据,通过发送函数向该客户端进程发送该第一数据,该第一数据为服务端进程待向该客户端进程所发送的数据;
响应模块,用于如果存在第二数据,通过读取函数读取该第二数据,对该第二数据进行响应,该第二数据为来自该客户端进程的待该服务端进程所读取的数据。
一方面,提供了一种数据传输装置,该装置包括:
第一发送模块,用于在原生层通过连接函数,向服务端进程发送连接请求,该连接请求中至少携带目标套接字地址;
检测模块,用于当接收到来自该服务端进程的验证通过响应时,检测请求发送队列是否为空;
第二发送模块,用于当该请求发送队列不为空时,确定存在第三数据,通过发送函数向该服务端进程发送该第三数据,该第三数据为客户端进程待向该服务端进程所发送的数据;
获取模块,用于当该请求发送队列为空时,确定不存在该第三数据,调用选择函数,获取该选择函数的返回值;
处理模块,用于当该返回值为正值时,确定存在第四数据,通过读取函数读取该第四数据,对该第四数据进行处理,该第四数据为来自该服务端进程的待客户端进程所读取的数据。
一方面,提供了一种终端,该终端包括一个或多个处理器和一个或多个存储器,该一个或多个存储器中存储有至少一条指令,该至少一条指令由该一个或多个处理器加载并执行以实现如上述任一种数据传输方法所执行的操作。
一方面,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令,该至少一条指令由处理器加载并执行以实现如上述任一种数据传输方法所执行的操作。
本发明实施例提供的技术方案带来的有益效果至少包括:
通过当在原生层通过接收函数接收到来自客户端进程的连接请求时,对该连接请求进行验证,从而完成了对每个连接请求的鉴权校验,当对该连接请求验证通过时,如果存在第一数据,通过发送函数向该客户端进程发送该第一数据,实现对数据传输中的数据发送环节,如果存在第二数据,通过读取函数读取该第二数据,对该第二数据进行响应,实现对数据传输中的数据读取和处理环节,从而在native层中实现了IPC机制下的数据传输,满足了native层中不同进程之间的数据传输需求。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种数据传输方法的实施环境示意图;
图2是本发明实施例提供的一种数据传输方法的交互流程图;
图3是本发明实施例提供的一种数据传输方法的函数逻辑框架图;
图4是本发明实施例提供的一种数据传输方法的流程图;
图5是本发明实施例提供的一种数据传输装置的结构示意图;
图6是本发明实施例提供的一种数据传输装置的结构示意图;
图7是本发明实施例提供的终端的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1是本发明实施例提供的一种数据传输方法的实施环境示意图。参见图1,该数据传输方法可以在任一配置有安卓操作系统的终端101上实现,在该终端101上,可以安装有多个应用客户端,例如即时通讯客户端、浏览器客户端、多媒体资源处理客户端等,该应用客户端用于为用户提供服务,在提供服务的过程中应用客户端可以调用不同逻辑结构层中的API,按照编程语言的不同,该逻辑结构层可以分为java层和原生(native)层:
上述java层为java方法实现的逻辑结构层,在java层中可以包括java API,该java API为用java语言编写的规范化的函数,技术人员在开发时能够通过调用该javaAPI,从而在不访问源代码的情况下,仅输入该java API所需的输入量,即可以实现该javaAPI所提供的功能。
上述native层为C/C++方法实现的逻辑结构层,在native层中可以包括nativeAPI,该native API可以是终端操作系统提供的原生代码库中的API,也可以是嵌入到应用客户端的软件开发工具包(software development kit,SDK)中的以C/C++方法实现的API,本发明实施例不对native API的来源进行具体限定。其中,该应用客户端可以是该终端101上安装的任一应用客户端,该native API可以采用so文件的形式嵌入SDK,也可以采用aar文件的形式嵌入SDK,本发明实施例不对该native API的嵌入方法进行具体限定。
基于上述情况,任一应用客户端在运行过程中,需要创建至少一个进程,每个进程都在各自的地址范围内运行,而终端操作系统通常也会维护至少一个进程,从而为各个应用客户端提供不同的系统服务,不同进程之间可以通过进程间通信(inter-processcommunication,IPC)机制来进行数据传输,在IPC机制下分为提出需求的客户端进程和提供服务的服务端进程。其中,该客户端进程和服务端进程可以是该终端101上存在的任意两个不同的进程,例如同一个应用客户端的不同进程,不同应用客户端的不同进程或者应用客户端的进程与终端操作系统的进程。
在上述终端101内的不同进程之间,如果存在java层的数据传输需求,可以通过本地套接字(LocalSocket)实现IPC机制下的数据传输,该本地套接字为终端操作系统内置的java API,该本地套接字将套接字封装在Unix域名空间,分为非命名本地套接字和命名本地套接字,其中,该非命名本地套接字仅能在父进程和子进程之间进行数据传输,而命名本地套接字可以在终端101上的任意两个进程之间进行数据传输。
基于上述场景,对于终端101上的native层而言,由于native层是由C/C++方法实现的,无法直接调用已有的本地套接字的java API,为了实现native层中的数据传输需求,下面对本发明实施例进行详述。
图2是本发明实施例提供的一种数据传输方法的交互流程图。参见图2,基于上述实施环境,进行数据传输的两方分别为客户端进程和服务端进程:
客户端进程向服务端进程发出的数据称为请求,任一请求可以包括包头和包体,在包头中可以包括包头起始字段(Begin)、协议版本(Version)、请求操作函数标识(Funcid)、包体序列化数据长度(Bodylen)、当前请求包标识(Requestid)、上层java原生接口调用者所在线程标识(Callertid)、当前请求时间戳(Timestamp)、包头数据长度(Headerlen)或者包体数据序列化格式枚举值(Bodyformat)中的至少一个。
其中,Begin字段用于标识该请求的业务逻辑,与该业务逻辑对应的业务参数由包体的结构体进行定义,而包体的结构体协议可以由上述Bodyformat字段决定,例如,该Bodyformat字段可以指示raw(byte数组),protobuf以及JSON(javascript objectnotation,JS对象简谱,一种轻量级的数据交换格式)等。
其中,Version字段为数据传输中所遵循的通信协议的版本号,并支持协议版本的扩展,Requestid字段用于唯一标识该请求,对于该客户端进程发出的每个请求,保持递增唯一性,Callertid字段为调用该客户端进程的线程的ID(identification,身份标识),其中,该线程位于java层,通过JNI(java native interface,java原生接口)实现对该客户端进程的调用。
服务端进程向客户端进程发出的数据称为响应,任一响应可以包括包头和包体,该包头中可以包括包头起始字段(Begin)、协议版本(Version)、响应操作函数标识(Funcid)、包体序列化数据长度(Bodylen)、当前响应包标识(Requestid)、当前响应时间戳(Timestamp)、包头数据长度(Headerlen)、包体数据序列化格式枚举值(Bodyformat)或者请求处理结果(RetCode)中的至少一个,每个响应对应于一个请求。
当服务端进程对目标请求处理完毕,可以在与该目标请求对应的目标响应的RetCode字段中添加正确返回值或业务处理结果,当服务端进程对目标请求解包失败或者验证失败,可以在与该目标请求对应的目标响应的RetCode字段中添加全局错误码,完成对目标响应的生成处理。
在上述介绍了请求和响应的基础上,本发明实施例以一个客户端进程与一个服务端进程进行数据传输的方法为例进行说明,在一些实施例中,还可以是多个客户端进程与一个服务端进程进行数据传输,对于该多个客户端进程中的任一客户端进程,与本发明实施例中提供的客户端进程具有类似的交互流程,在此不做赘述,该实施例包括:
200、终端通过终端操作系统的服务端进程在native层创建服务端套接字。
其中,该服务端进程可以是终端操作系统所创建的任一进程,例如提供录音服务的进程、提供拍照服务的进程等,该服务端进程可以为至少一个客户端进程提供服务,需要说明的是,本发明实施例仅以该服务端进程为终端操作系统侧的进程为例进行说明,实际上该服务端进程可以为与客户端进程不相同的任一进程,例如为与该客户端进程所对应的应用客户端(application,APP)创建的另一进程,或者为与该APP不同的APP创建的任一进程。
在上述过程中,图3是本发明实施例提供的一种数据传输方法的函数逻辑框架图,参见图3,可以向客户端进程和服务端进程提供一个LocalSocket基类(本地套接字基类),使得客户端进程和服务端进程均能够调用LocalSocket基类中提供的函数,从而避免了运行过程中函数的冗余,该服务端进程可以在native层中调用LocalSocket基类中的createSocket()函数以创建服务端套接字,在执行该createSocket()函数的过程中,可以采取下述步骤:将传入的地址参数设置为空,调用newSocket()函数在该服务端进程内创建该服务端套接字,以作为后续数据传输的载体。
201、终端上的该服务端进程通过绑定函数,将目标套接字地址与至少一个通信端口绑定。
其中,该绑定函数可以为bind()函数,该bind()函数用于绑定目标套接字地址和至少一个通信端口。
其中,该目标套接字地址也即是套接字名,用于为服务端进程和客户端进程提供通信地址,该套接字名可以为字符串的形式,在数据传输的过程中,该服务端进程与该客户端进程必须使用相同的套接字名,才能够建立起IPC机制,在上述情况中,一个套接字名可以对应于多个客户端进程,但只能唯一对应于一个服务端进程。
可选地,在安卓操作系统中该目标套接字地址可以为该服务端进程的文件描述符,从而在实现同一终端上不同进程之间的数据传输的情况下,避免了执行复杂的TCP/UDP协议栈,节省了数据传输过程中占用的内存。
可选地,该至少一个通信端口与该服务端进程所提供的服务相对应,也即是,终端操作系统通常会为不同的服务端进程分配不同的通信端口,由于不同的服务端进程可以提供不同的服务,使得客户端进程可以根据所需求的服务,从而通过与该服务所对应的通信端口,与提供该服务的服务端进程建立数据传输,在一些实施例中,终端操作系统仅为该服务端进程分配一个通信端口,从而当任一客户端进程需求与该服务端进程所对应的服务时,能够直接向该通信端口发出连接请求,以申请建立数据传输。
202、终端上的该服务端进程通过监听函数,监听该至少一个通信端口。
其中,该监听函数可以为listen()函数,该listen()函数用于监听是否从该至少一个通信端口中接收任一客户端进程的连接请求。
通过上述步骤200-202,在native层创建服务端进程,将目标套接字地址与至少一个通信端口绑定,对该至少一个通信端口进行监听,使得当任一客户端进程向该服务端进程发送连接请求时,能够及时触发服务端进程做出响应。
203、终端通过应用客户端的客户端进程在native层创建客户端套接字。
可选地,该客户端进程可以为该应用客户端的主进程,也可以为该应用客户端的除了主进程之外的进程,本发明实施例不对该客户端进程的类型进行具体限定。
在上述过程中,应用客户端可以在native层中调用LocalSocket基类中的createSocket()函数以创建客户端套接字,在执行该createSocket()函数的过程中,将传入的地址参数设置为上述步骤201中的目标套接字地址,再调用newSocket()函数在该客户端进程内创建该客户端套接字,以作为后续数据传输的载体。
可选地,上述步骤203与上述步骤200-202没有时序上的关联,可以是同时进行,可以是先后进行,本发明实施例不对步骤200-202与步骤203的执行先后顺序进行具体限定。
204、终端上的该客户端进程通过连接函数,向服务端进程发送连接请求,该连接请求中至少携带目标套接字地址。
其中,该连接函数可以是connect()函数,该connect()函数用于与服务端进程建立通信连接。
在一些实施例中,该客户端进程可以通过调用init()函数进行初始化,调用tryStartEngine()函数启动客户端进程的引擎实例,调用start()函数创建连接请求之后,调用connect()函数发送该连接请求。
205、当终端上的该服务端进程在native层通过接收函数接收到来自客户端进程的连接请求,执行步骤206。
其中,该接收函数可以是accept()函数,该accept()函数用于接收任一客户端进程发送的连接请求。
在一些实施例中,服务端进程可以通过调用accept()函数接收未处理的连接请求,当存在未处理的连接请求时,执行下述步骤206-207对该连接请求进行验证,当不存在未处理的连接请求时,执行下述步骤208-209检测是否存在第一数据,进一步地执行下述步骤210-211检测是否存在第二数据。可选地,当未处理的连接请求的数量大于1时,重复执行步骤205-207所执行的操作,对所有的连接请求进行验证完毕后,执行下述步骤208-209。
在一些实施例中,在执行完步骤205-212所执行的数据传输之后,重新执行该步骤205-212所执行的操作,以构成一个loop()循环过程,可选地,如果当前不存在未处理的连接请求,且不存在第一数据和第二数据时,则该loop()循环为空转状态,直到接收到新的连接请求,检测到该第一数据或检测到该第二数据,可以结束空转状态。
206、终端上的该服务端进程通过获取套接字选项函数,获取该客户端进程的应用标识,该应用标识用于唯一标识该客户端进程所在的应用客户端。
其中,该获取套接字选项函数可以是getsockopt()函数,该getsockopt()函数用于获取客户端进程的应用标识(user identification,UID)。
可选地,当该连接请求中携带该应用标识时,服务端进程还可以不调用上述getsockopt()函数,而是直接读取该连接请求中的目标字段,以获取该应用标识,从而简化了校验流程。
207、当该应用标识为预设应用标识时,通过回调函数,终端上的该服务端进程向该客户端进程发送验证通过响应,该预设应用标识为与该服务端进程所支持进行数据传输服务的至少一个应用客户端所对应的至少一个应用标识。
可选地,该回调函数可以是上述步骤200中LocalSocket基类所能够提供的recvEvent()函数,客户端进程将该recvEvent()函数的函数指针传递给该服务端进程中的accept()函数,当该服务端进程对该连接请求进行验证后,即该accept()函数执行完毕时,该服务端进程可以通过调用上述recvEvent()函数的函数指针,从而通过该recvEvent()函数来通知客户端进程已对该连接请求产生响应,当然,可以通过向该recvEvent()函数中传入目标参数,从而通知该客户端进程与该目标参数相关的信息,例如该目标参数可以用于指示该服务端进程当前的空闲资源。进一步地,客户端进程还可以通过回调函数,通知到java层中调用线程已建立通信连接,从而在业务处理流程中形成闭环。
在一种可能实施方式中,该服务端进程中可以维护一个预设应用标识列表,当从上述步骤206中获取应用标识后,以该应用标识为索引,当该索引能够命中该预设应用标识列表中的任一应用标识时,确定该应用标识为预设应用标识。
在一些实施例中,该服务端进程可以为每个通信端口维护一个连接队列,当客户端进程向某一通信端口发送的连接请求被服务端进程验证通过后,将该客户端进程的标识添加到该连接队列中,将该连接队列的连接数增加一个,从而方便在服务端进程侧对各个通信端口建立的数据传输进行管理和统计,可选地,在安卓操作系统中,该客户端进程的标识可以为该客户端进程的文件描述符。
上述步骤207提供了当该连接请求验证通过时的处理方式,而当该连接请求验证失败时,也即是该应用标识不是预设应用标识时,服务端进程向该客户端进程发送验证失败响应,其中,该验证失败响应的RetCode字段可以携带全局错误码。
在上述步骤200-207中,建立了客户端进程与服务端进程之间的套接字通信连接,当服务端进程对该连接请求验证通过时,即可在服务端进程侧实现周期性地发送和读取数据,当然,当客户端进程接收对该连接请求的验证通过响应后,可以在客户端进程侧执行类似的循环过程,以在客户端进程侧实现周期性地发送和读取数据。
208、当对该连接请求验证通过时,终端上的该服务端进程检测响应发送队列是否为空,当该响应发送队列不为空时,确定存在第一数据,该第一数据为服务端进程待向该客户端进程所发送的数据。
可选地,服务端进程中维护有响应发送队列,该响应发送队列用于存储该第一数据,服务端进程通过检测该响应发送队列是否为空,从而确定是否存在第一数据,上述步骤208中是当响应发送队列不为空时,确定存在第一数据,相反,当该响应发送队列为空时,则可以确定不存在该第一数据,从而触发执行下述步骤210。
209、如果存在第一数据,终端上的该服务端进程通过发送函数向该客户端进程发送该第一数据。
其中,该发送函数可以为send()函数,该send()函数用于发送请求或者响应,可选地,可以向该send()函数传入客户端进程的标识参数,以指示该第一数据的接收方。
在一些实施例中,如果服务端进程与某个客户端进程的连接断开,导致服务端进程通过send()函数发送该第一数据时发送失败,如果在预设时长后没有接收该应用客户端的重连请求,可以删除该第一数据,并在该客户端进程对应的通信端口的连接队列中删去该客户端进程的标识,释放出闲置的内存。
210、终端上的该服务端进程调用选择函数,获取该选择函数的返回值。
其中,该选择函数可以为select()函数,该select()函数可以获取文件描述符的读变化,也即是,如果该服务端进程中存在待读取的第二数据,select()函数的返回值为正值,而如果该服务端进程中不存在该第二数据,select()函数的返回值则不为正值,在一些实施例中,如果select()函数设置了超时时间(timeout)参数,当超出该timeout参数规定的时间时,select()函数的返回值为0,当发生错误时,select()函数的返回值为负值,可以认为与该客户端进程断开连接。
211、当该返回值为正值时,终端上的该服务端进程确定存在第二数据,该第二数据为来自该客户端进程的待该服务端进程所读取的数据。
通过上述步骤210-211,通过调用选择函数,检测服务端进程中是否存在第二数据,当返回值为正值时,确定存在第二数据,相反,当该返回值不为正值时,确定不存在该第二数据,从而结束本次循环,跳转回步骤205进行新一次的循环。
212、如果存在该第二数据,终端上的该服务端进程通过读取函数读取该第二数据,对该第二数据进行响应。
其中,该读取函数可以是read()函数,该read()函数用于读取该第二数据的各个字段。
在上述过程中,图4是本发明实施例提供的一种数据传输方法的流程图,参见图4,当服务端进程读取该第二数据后,对该第二数据进行响应,也即是对该第二数据进行处理,在对该第二数据进行处理的过程中,如果产生了待向该客户端进程发送的第一数据,则将该第一数据添加到响应发送队列中,以在下一次循环中完成发送,从而实现了服务端进程侧的数据传输的完整闭环。
需要说明的是,上述步骤208-209实现了向客户端进程发送第一数据,上述步骤210-212实现了对来自客户端进程的第二数据进行读取和处理,在本发明实施例中提供的数据传输方法中,对该步骤208-209以及该步骤210-212没有执行时序的限定,也即是当对该客户端进程验证通过后,还可以先执行下述步骤:当对该连接请求验证通过时,服务端进程调用选择函数,获取该选择函数的返回值;当该返回值为正值时,服务端进程确定存在第二数据,通过读取函数读取该第二数据,对该第二数据进行响应;当该返回值不为正值时,服务端进程检测响应发送队列是否为空,当该响应发送队列不为空时,确定存在第一数据,通过发送函数向该客户端进程发送该第一数据。
213、当接收到验证通过响应时,终端上的该客户端进程检测请求发送队列是否为空,当该请求发送队列不为空时,确定存在第三数据,该第三数据为客户端进程待向服务端进程所发送的数据。
可选地,当该请求发送队列为空时,确定不存在该第三数据,从而执行下述步骤215-217。
214、如果存在第三数据,终端上的该客户端进程通过发送函数向该服务端进程发送该第三数据。
215、终端上的该客户端进程调用选择函数,获取该选择函数的返回值。
216、当该返回值为正值时,终端上的该客户端进程确定存在第四数据,该第四数据为来自该服务端进程的待客户端进程所读取的数据。
217、如果存在该第四数据,终端上的该客户端进程通过读取函数读取该第四数据,对该第四数据进行处理。
上述步骤213-217为客户端进程在数据传输过程中所执行的loop()循环,在执行步骤217对第四数据进行处理后,返回到步骤213继续检测请求发送队列是否为空,从而实现周期性的数据发送和读取数据,上述步骤213-217所执行的操作与服务端进程中的步骤相类似,在此不作赘述。
需要说明的是,本发明实施例仅先对服务端进程的loop()循环进行说明,再对客户端进程的loop()循环进行说明为例,在一些实施例中,本发明实施例不对上述步骤213-214和步骤215-217的执行时序进行具体限定,也不对上述步骤213-217与步骤208-212的执行时序进行具体限定。
本发明实施例提供的方法,通过当在原生层通过接收函数接收到来自客户端进程的连接请求时,对该连接请求进行验证,从而完成了对每个连接请求的鉴权校验,当对该连接请求验证通过时,如果存在第一数据,通过发送函数向该客户端进程发送该第一数据,实现对数据传输中的数据发送环节,如果存在该第二数据,通过读取函数读取该第二数据,对该第二数据进行响应,实现对数据传输中的数据读取和处理环节,从而在native层中实现了IPC机制下的数据传输,满足了native层中不同进程之间的数据传输需求,进一步地,在接收连接请求之前,将目标套接字地址与至少一个通信端口绑定,并对该至少一个通信端口进行监听,能够实时监听至少一个通信端口的动态,此外,还可以通过回调函数通知客户端进程对连接请求的验证是否成功,完善了数据传输流程,进而将文件描述符作为目标套接字地址,能够在实现同一终端上不同进程之间的数据传输的情况下,避免了执行复杂的TCP/UDP协议栈,节省了数据传输过程中占用的内存进一步地,通过应用标识对连接请求进行鉴权校验,保证了服务端进程能够仅为预设应用标识所对应的应用客户端提供服务。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
图5是本发明实施例提供的一种数据传输装置的结构示意图,参见图5,该装置包括:
验证模块501,用于当在原生层通过接收函数接收到来自客户端进程的连接请求时,对该连接请求进行验证;
发送模块502,用于当对该连接请求验证通过时,如果存在第一数据,通过发送函数向该客户端进程发送该第一数据,该第一数据为服务端进程待向该客户端进程所发送的数据;
响应模块503,用于如果存在第二数据,通过读取函数读取该第二数据,对该第二数据进行响应,该第二数据为来自该客户端进程的待该服务端进程所读取的数据。
本发明实施例提供的装置,通过当在原生层通过接收函数接收到来自客户端进程的连接请求时,对该连接请求进行验证,从而完成了对每个连接请求的鉴权校验,当对该连接请求验证通过时,如果存在第一数据,通过发送函数向该客户端进程发送该第一数据,实现对数据传输中的数据发送环节,如果存在该第二数据,通过读取函数读取该第二数据,对该第二数据进行响应,实现对数据传输中的数据读取和处理环节,从而在native层中实现了IPC机制下的数据传输,满足了native层中不同进程之间的数据传输需求。
在一种可能实施方式中,基于图5的装置组成,该验证模块501包括:
获取单元,用于当在该原生层通过该接收函数接收到该连接请求时,获取该客户端进程的应用标识,该应用标识用于唯一标识该客户端进程所在的应用客户端;
发送单元,用于当该应用标识为预设应用标识时,向该客户端进程发送验证通过响应,该预设应用标识为与该服务端进程所支持进行数据传输服务的至少一个应用客户端所对应的至少一个应用标识。
在一种可能实施方式中,该获取单元还用于通过获取套接字选项函数获取该应用标识;
该发送单元还用于通过回调函数向该客户端进程发送该验证通过响应。
在一种可能实施方式中,基于图5的装置组成,该装置还包括:
检测确定单元,用于检测响应发送队列是否为空,当该响应发送队列不为空时,确定存在该第一数据;
该检测确定单元,还用于当该响应发送队列为空时,确定不存在该第一数据。
在一种可能实施方式中,基于图5的装置组成,该装置还包括:
调用单元,用于调用选择函数,获取该选择函数的返回值;
确定单元,用于当该返回值为正值时,确定存在该第二数据;
该确定单元,还用于当该返回值不为正值时,确定不存在该第二数据。
在一种可能实施方式中,基于图5的装置组成,该装置还包括:
绑定单元,用于通过绑定函数,将目标套接字地址与至少一个通信端口绑定;
监听单元,用于通过监听函数,监听该至少一个通信端口。
在一种可能实施方式中,该目标套接字地址为文件描述符。
在一种可能实施方式中,任一来自该客户端进程的请求包括包头和包体,该包头包括包头起始字段、协议版本、请求操作函数标识、包体序列化数据长度、当前请求包标识、上层java原生接口调用者所在线程标识、当前请求时间戳、包头数据长度或者包体数据序列化格式枚举值中的至少一个。
在一种可能实施方式中,任一该服务端进程发出的响应包括包头和包体,该包头包括包头起始字段、协议版本、响应操作函数标识、包体序列化数据长度、当前响应包标识、当前响应时间戳、包头数据长度、包体数据序列化格式枚举值或者请求处理结果中的至少一个。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
需要说明的是:上述实施例提供的数据传输装置在传输数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将终端的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据传输装置与数据传输方法实施例属于同一构思,其具体实现过程详见数据传输方法实施例,这里不再赘述。
图6是本发明实施例提供的一种数据传输装置的结构示意图,参见图6,该装置包括:
第一发送模块601,用于在原生层通过连接函数,向服务端进程发送连接请求,该连接请求中至少携带目标套接字地址;
检测模块602,用于当接收到来自该服务端进程的验证通过响应时,检测请求发送队列是否为空;
第二发送模块603,用于当该请求发送队列不为空时,确定存在第三数据,通过发送函数向该服务端进程发送该第三数据,该第三数据为客户端进程待向该服务端进程所发送的数据;
获取模块604,用于当该请求发送队列为空时,确定不存在该第三数据,调用选择函数,获取该选择函数的返回值;
处理模块605,用于当该返回值为正值时,确定存在第四数据,通过读取函数读取该第四数据,对该第四数据进行处理,该第四数据为来自该服务端进程的待客户端进程所读取的数据。
本发明实施例提供的装置,通过在原生层通过连接函数,向服务端进程发送连接请求,当接收到来自该服务端进程的验证通过响应时,通过检测请求发送队列来确定是否存在第三数据,当存在第三数据时向该服务端进程发送该第三数据,实现对数据传输中的数据发送环节,当不存在该第三数据时通过选择函数的返回值,确定是否存在第四数据,如果存在第四数据,对该第四数据进行读取和处理,实现对数据传输中的数据读取和处理环节,从而在native层中实现了IPC机制下的数据传输,满足了native层中不同进程之间的数据传输需求。
在一种可能实施方式中,该客户端进程发出的任一请求包括包头和包体,该包头包括包头起始字段、协议版本、请求操作函数标识、包体序列化数据长度、当前请求包标识、上层java原生接口调用者所在线程标识、当前请求时间戳、包头数据长度或者包体数据序列化格式枚举值中的至少一个;或,
任一来自该服务端进程的响应包括包头和包体,该包头包括包头起始字段、协议版本、响应操作函数标识、包体序列化数据长度、当前响应包标识、当前响应时间戳、包头数据长度、包体数据序列化格式枚举值或者请求处理结果中的至少一个。
需要说明的是:上述实施例提供的数据传输装置在传输数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将终端的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据传输装置与数据传输方法实施例属于同一构思,其具体实现过程详见数据传输方法实施例,这里不再赘述。
图7是本发明实施例提供的终端的结构示意图,参见图7,该终端700可以是:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端700还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端700包括有:处理器701和存储器702。可选地,该处理器701可以为一个或多个,该存储器702可以为一个或多个,在此仅以单个处理器701和存储器702为例进行说明。
处理器701可以包括一个或多个处理核心,比如4核心处理器、7核心处理器等。处理器701可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器701也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器701可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器701还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器702可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器702还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器702中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器701所执行以实现本申请中方法实施例提供的数据传输方法。
在一些实施例中,终端700还可选包括有:外围设备接口703和至少一个外围设备。处理器701、存储器702和外围设备接口703之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口703相连。具体地,外围设备包括:射频电路704、显示屏705、摄像头706、音频电路707和电源708中的至少一种。
外围设备接口703可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器701和存储器702。在一些实施例中,处理器701、存储器702和外围设备接口703被集成在同一芯片或电路板上;在一些其他实施例中,处理器701、存储器702和外围设备接口703中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路704用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路704通过电磁信号与通信网络以及其他通信设备进行通信。射频电路704将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路704包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路704可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路704还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏705用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏705是触摸显示屏时,显示屏705还具有采集在显示屏705的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器701进行处理。此时,显示屏705还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏705可以为一个,设置终端700的前面板;在另一些实施例中,显示屏705可以为至少两个,分别设置在终端700的不同表面或呈折叠设计;在再一些实施例中,显示屏705可以是柔性显示屏,设置在终端700的弯曲表面上或折叠面上。甚至,显示屏705还可以设置成非矩形的不规则图形,也即异形屏。显示屏705可以采用LCD(LiquidCrystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件706用于采集图像或视频。可选地,摄像头组件706包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件706还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路707可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器701进行处理,或者输入至射频电路704以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端700的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器701或射频电路704的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路707还可以包括耳机插孔。
电源708用于为终端700中的各个组件进行供电。电源708可以是交流电、直流电、一次性电池或可充电电池。当电源708包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
本领域技术人员可以理解,图7中示出的结构并不构成对终端700的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括至少一条指令的存储器,上述至少一条指令可由终端中的一个或多个处理器执行以完成上述实施例中数据传输方法。例如,该计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (15)
1.一种数据传输方法,其特征在于,所述方法包括:
当在原生层通过接收函数接收到来自客户端进程的连接请求时,对所述连接请求进行验证;
当对所述连接请求验证通过时,如果存在第一数据,通过发送函数向所述客户端进程发送所述第一数据,所述第一数据为服务端进程待向所述客户端进程所发送的数据;
如果存在第二数据,通过读取函数读取所述第二数据,对所述第二数据进行响应,所述第二数据为来自所述客户端进程的待所述服务端进程所读取的数据。
2.根据权利要求1所述的方法,其特征在于,所述当在原生层通过接收函数接收到来自客户端进程的连接请求时,对所述连接请求进行验证包括:
当在所述原生层通过所述接收函数接收到所述连接请求时,获取所述客户端进程的应用标识,所述应用标识用于唯一标识所述客户端进程所在的应用客户端;
当所述应用标识为预设应用标识时,向所述客户端进程发送验证通过响应,所述预设应用标识为与所述服务端进程所支持进行数据传输服务的至少一个应用客户端所对应的至少一个应用标识。
3.根据权利要求2所述的方法,其特征在于,所述获取所述客户端进程的应用标识包括:
通过获取套接字选项函数获取所述应用标识;
所述向所述客户端进程发送验证通过响应包括:
通过回调函数向所述客户端进程发送所述验证通过响应。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
检测响应发送队列是否为空,当所述响应发送队列不为空时,确定存在所述第一数据;
当所述响应发送队列为空时,确定不存在所述第一数据。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
调用选择函数,获取所述选择函数的返回值;
当所述返回值为正值时,确定存在所述第二数据;
当所述返回值不为正值时,确定不存在所述第二数据。
6.根据权利要求1所述的方法,其特征在于,所述对所述连接请求进行验证之前,所述方法还包括:
通过绑定函数,将目标套接字地址与至少一个通信端口绑定;
通过监听函数,监听所述至少一个通信端口。
7.根据权利要求6所述的方法,其特征在于,所述目标套接字地址为文件描述符。
8.根据权利要求1所述的方法,其特征在于,任一来自所述客户端进程的请求包括包头和包体,所述包头包括包头起始字段、协议版本、请求操作函数标识、包体序列化数据长度、当前请求包标识、上层java原生接口调用者所在线程标识、当前请求时间戳、包头数据长度或者包体数据序列化格式枚举值中的至少一个。
9.根据权利要求1所述的方法,其特征在于,任一所述服务端进程发出的响应包括包头和包体,所述包头包括包头起始字段、协议版本、响应操作函数标识、包体序列化数据长度、当前响应包标识、当前响应时间戳、包头数据长度、包体数据序列化格式枚举值或者请求处理结果中的至少一个。
10.一种数据传输方法,其特征在于,所述方法包括:
在原生层通过连接函数,向服务端进程发送连接请求,所述连接请求中至少携带目标套接字地址;
当接收到来自所述服务端进程的验证通过响应时,检测请求发送队列是否为空;
当所述请求发送队列不为空时,确定存在第三数据,通过发送函数向所述服务端进程发送所述第三数据,所述第三数据为客户端进程待向所述服务端进程所发送的数据;
当所述请求发送队列为空时,确定不存在所述第三数据,调用选择函数,获取所述选择函数的返回值;
当所述返回值为正值时,确定存在第四数据,通过读取函数读取所述第四数据,对所述第四数据进行处理,所述第四数据为来自所述服务端进程的待客户端进程所读取的数据。
11.根据权利要求10所述的方法,其特征在于,所述客户端进程发出的任一请求包括包头和包体,所述包头包括包头起始字段、协议版本、请求操作函数标识、包体序列化数据长度、当前请求包标识、上层java原生接口调用者所在线程标识、当前请求时间戳、包头数据长度或者包体数据序列化格式枚举值中的至少一个;或,
任一来自所述服务端进程的响应包括包头和包体,所述包头包括包头起始字段、协议版本、响应操作函数标识、包体序列化数据长度、当前响应包标识、当前响应时间戳、包头数据长度、包体数据序列化格式枚举值或者请求处理结果中的至少一个。
12.一种数据传输装置,其特征在于,所述装置包括:
验证模块,用于当在原生层通过接收函数接收到来自客户端进程的连接请求时,对所述连接请求进行验证;
发送模块,用于当对所述连接请求验证通过时,如果存在第一数据,通过发送函数向所述客户端进程发送所述第一数据,所述第一数据为服务端进程待向所述客户端进程所发送的数据;
响应模块,用于如果存在第二数据,通过读取函数读取所述第二数据,对所述第二数据进行响应,所述第二数据为来自所述客户端进程的待所述服务端进程所读取的数据。
13.一种数据传输装置,其特征在于,所述装置包括:
第一发送模块,用于在原生层通过连接函数,向服务端进程发送连接请求,所述连接请求中至少携带目标套接字地址;
检测模块,用于当接收到来自所述服务端进程的验证通过响应时,检测请求发送队列是否为空;
第二发送模块,用于当所述请求发送队列不为空时,确定存在第三数据,通过发送函数向所述服务端进程发送所述第三数据,所述第三数据为客户端进程待向所述服务端进程所发送的数据;
获取模块,用于当所述请求发送队列为空时,确定不存在所述第三数据,调用选择函数,获取所述选择函数的返回值;
处理模块,用于当所述返回值为正值时,确定存在第四数据,通过读取函数读取所述第四数据,对所述第四数据进行处理,所述第四数据为来自所述服务端进程的待客户端进程所读取的数据。
14.一种终端,其特征在于,所述终端包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条指令,所述至少一条指令由所述一个或多个处理器加载并执行以实现如权利要求1至权利要求9或权利要求10至权利要求11中任一项所述的数据传输方法所执行的操作。
15.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现如权利要求1至权利要求9或权利要求10至权利要求11中任一项所述的数据传输方法所执行的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910064591.1A CN110413420B (zh) | 2019-01-23 | 2019-01-23 | 数据传输方法、装置、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910064591.1A CN110413420B (zh) | 2019-01-23 | 2019-01-23 | 数据传输方法、装置、终端及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110413420A true CN110413420A (zh) | 2019-11-05 |
CN110413420B CN110413420B (zh) | 2024-01-30 |
Family
ID=68358116
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910064591.1A Active CN110413420B (zh) | 2019-01-23 | 2019-01-23 | 数据传输方法、装置、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110413420B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111737025A (zh) * | 2020-05-25 | 2020-10-02 | 中车株洲电力机车研究所有限公司 | 用于实现VxWorks操作系统环境下RTP间数据调用的方法及系统 |
CN112153037A (zh) * | 2020-09-18 | 2020-12-29 | 北京浪潮数据技术有限公司 | 一种rest请求响应方法、装置、设备及介质 |
CN114071225A (zh) * | 2020-08-07 | 2022-02-18 | 广州虎牙科技有限公司 | 一种帧动画播放方法、装置和系统 |
CN114938395A (zh) * | 2022-05-11 | 2022-08-23 | 北京字节跳动网络技术有限公司 | 服务响应方法、装置、设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100306783A1 (en) * | 2009-05-29 | 2010-12-02 | Steven Dake | Shared memory reusable ipc library |
US20140006772A1 (en) * | 2011-10-11 | 2014-01-02 | Zenprise, Inc. | Protecting enterprise data through policy-based encryption of message attachments |
US20140068636A1 (en) * | 2012-09-06 | 2014-03-06 | Accedian Networks Inc. | Multicasting of event notifications using extended socket for inter-process communication |
CN104992112A (zh) * | 2015-05-19 | 2015-10-21 | 上海理工大学 | 检测安卓系统敏感信息泄露的方法和装置 |
US20170127270A1 (en) * | 2015-11-02 | 2017-05-04 | Lenovo (Beijing) Limited | Device, method, and program product for establishing a data connection |
CN108733495A (zh) * | 2017-04-13 | 2018-11-02 | 东方明珠新媒体股份有限公司 | 用于实现跨平台通信的方法和设备 |
CN109213611A (zh) * | 2018-08-01 | 2019-01-15 | 天津字节跳动科技有限公司 | 跨进程通讯方法、装置、终端及存储介质 |
-
2019
- 2019-01-23 CN CN201910064591.1A patent/CN110413420B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100306783A1 (en) * | 2009-05-29 | 2010-12-02 | Steven Dake | Shared memory reusable ipc library |
US20140006772A1 (en) * | 2011-10-11 | 2014-01-02 | Zenprise, Inc. | Protecting enterprise data through policy-based encryption of message attachments |
US20140068636A1 (en) * | 2012-09-06 | 2014-03-06 | Accedian Networks Inc. | Multicasting of event notifications using extended socket for inter-process communication |
CN104992112A (zh) * | 2015-05-19 | 2015-10-21 | 上海理工大学 | 检测安卓系统敏感信息泄露的方法和装置 |
US20170127270A1 (en) * | 2015-11-02 | 2017-05-04 | Lenovo (Beijing) Limited | Device, method, and program product for establishing a data connection |
CN108733495A (zh) * | 2017-04-13 | 2018-11-02 | 东方明珠新媒体股份有限公司 | 用于实现跨平台通信的方法和设备 |
CN109213611A (zh) * | 2018-08-01 | 2019-01-15 | 天津字节跳动科技有限公司 | 跨进程通讯方法、装置、终端及存储介质 |
Non-Patent Citations (2)
Title |
---|
JALON007: "Linux IPC之socket解析及实例代码", pages 1 - 3, Retrieved from the Internet <URL:《https://www.jb51.net/article/133778.htm》> * |
SANJAY-F: "Android网络优化1-Native Socket-android native socket", pages 1 - 3, Retrieved from the Internet <URL:《https://blog.csdn.net/sanjay_f/article/details/49836843》> * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111737025A (zh) * | 2020-05-25 | 2020-10-02 | 中车株洲电力机车研究所有限公司 | 用于实现VxWorks操作系统环境下RTP间数据调用的方法及系统 |
CN111737025B (zh) * | 2020-05-25 | 2024-04-09 | 中车株洲电力机车研究所有限公司 | 用于实现VxWorks操作系统环境下实时进程间数据调用的方法及系统 |
CN114071225A (zh) * | 2020-08-07 | 2022-02-18 | 广州虎牙科技有限公司 | 一种帧动画播放方法、装置和系统 |
CN114071225B (zh) * | 2020-08-07 | 2024-03-01 | 广州虎牙科技有限公司 | 一种帧动画播放方法、装置和系统 |
CN112153037A (zh) * | 2020-09-18 | 2020-12-29 | 北京浪潮数据技术有限公司 | 一种rest请求响应方法、装置、设备及介质 |
CN114938395A (zh) * | 2022-05-11 | 2022-08-23 | 北京字节跳动网络技术有限公司 | 服务响应方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110413420B (zh) | 2024-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11947974B2 (en) | Application start method and electronic device | |
CN110413420A (zh) | 数据传输方法、装置、终端及存储介质 | |
CN111628916B (zh) | 一种智能音箱与电子设备协作的方法及电子设备 | |
WO2021052200A1 (zh) | 一种设备能力调度方法及电子设备 | |
CN110602686B (zh) | 一种使用远程sim模块的方法及电子设备 | |
CN113923230A (zh) | 数据同步方法、电子设备和计算机可读存储介质 | |
CN109194972A (zh) | 直播流获取方法、装置、计算机设备及存储介质 | |
WO2021104259A1 (zh) | 一种快应用与原生应用间数据共享的方法及终端 | |
WO2021179990A1 (zh) | 一种应用服务器的访问方法及终端 | |
CN109522146A (zh) | 对客户端进行异常测试的方法、装置及存储介质 | |
CN114722377A (zh) | 一种利用其它设备授权的方法、电子设备和系统 | |
KR20210019105A (ko) | 데이터 송신 방법 및 전자 기기 | |
CN110413383B (zh) | 事件处理方法、装置、终端及存储介质 | |
CN111132047A (zh) | 网络连接方法及装置 | |
CN110278273A (zh) | 多媒体文件上传方法、装置、终端、服务器和存储介质 | |
CN110086814A (zh) | 一种数据获取的方法、装置及存储介质 | |
US20240095408A1 (en) | Data protection method and system, medium, and electronic device | |
CN116982042A (zh) | 灵活授权的访问控制方法、相关装置及系统 | |
WO2024093795A1 (zh) | 一种设备替换的配置方法及装置 | |
WO2023142940A1 (zh) | 应用组件分享方法及相关设备 | |
WO2024078315A1 (zh) | 一种应用控制方法、电子设备和系统 | |
WO2023284652A1 (zh) | 一种服务访问方法、终端和系统 | |
CN117135729B (zh) | 多设备协同方法、系统及终端设备 | |
CN116048544B (zh) | 一种弹窗广告的处理方法、电子设备及可读存储介质 | |
CN116049096B (zh) | 一种数据迁移方法、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |