本发明属于一种通信控制技术领域,更具体的涉及一种在IOS系统平台上进行长连接的网络数据的分发及处理方法。
背景技术:
目前,随着苹果公司IOS(iMac)智能手机的普及,对应的适应于IOS系统的应用程序也越来越丰富了。程序的功能越来越多,也必定意味着着程序的复杂性也越来越高。
具体的,对于IOS设备来说,其设备硬件是受限制的,所以对于IOS系统的程序开发人员来说,需要不断的优化其性能,提高其执行效率。任何一个IOS应用程序,都会有网络通信功能,具体对于网络直播APP而言,一个典型的网络通信功能就是通过网络通信来收发弹幕消息。
对于消息量非常大的应用(比如现在非常火爆的网络视频直播应用),因为网络通信的数据量非常大,所以优化其网络消息的接收分发及处理过程,提高程序中代码的执行效率,特别是对于现实环境下,多种系统(IOS苹果系统,Android安卓系统,Windows系统)共存于同一个网络中,提高相对比封闭的IOS苹果系统的应用程序的协作能力和跨平台的能力,对于应用开发者来说是非常重要。
对于长连接的网络数据,其适用于TCP网络连接(四层模型,第四层应用层、第三层传输层、第二层网络层和第一层网络接口)来接收消息和发送消息并进行处理,然后由于IOS系统使用的object-c代码是比较封闭的,其在长连接的网络数据分发过程中会使得程序的开发过程比较低效。
技术实现要素:
针对现有技术中存在的缺陷,本发明的目的在于提供一种IOS系统中长连接网络数据分发及处理方法和系统来解决现有技术的缺陷。
本发明通过将长连接的网络使用C++语言来编写及处理,收到消息时C++代码对消息进行解密,发送消息时C++代码来对消息进行打包处理,并且使用socket来发送。通过使用C++代码来编写可以提供跨系统平台的特性,其可以使用在如Android、Windows、linux、IOS等系统平台上。同时使用C++代码也可以更高效的处理代码。尤其对于网络消息通常都是加密的,所以使用C++代码则可以高效的解密加密。C++解密完消息后再对消息进行解码出各个字段,然后将解密的字段推送给IOS应用层代码中。
为达到以上目的,本发明采取的技术方案是:
本发明提供一种IOS系统中长连接网络数据分发及处理方法,用于在客户端和服务器之间进行长连接的网络数据分发和处理,其特征在于,包括以下步骤:
使用C++代码编写IOS系统客户端的网络接口层进行长连接的网络数据的收发;
对接收到的网络数据进行解密和解包;
将C++层网络接收到的网络数据传递到应用层的object-c代码层;
将网络数据由object-c代码层推送到IOS的应用层中。
本发明提供的IOS系统中长连接网络数据分发及处理方法,还可以具有这样的特征,网络接口层进行长连接的网络数据的收发包括以下过程:
在接收和分发网络数据的客户端和服务器之间创建网络socket,
设置网络socket的IP地址和端口号,
客户端与服务器进行连接,
使用线程函数来接收和发送网络数据。
本发明提供的IOS系统中长连接网络数据分发及处理方法,还可以具有这样的特征,所述线程函数由IOS系统自带的API函数pthread_create来创建。
本发明提供的IOS系统中长连接网络数据分发及处理方法,还可以具有这样的特征,所述线程函数接收和发送网络数据的步骤包括:
对网络socket的事件进行监听,
根据监听的情况,使用seletct函数来判断当前的网络socket是可读状态还是可写状态,
当判断为可读状态时,通过recv函数来接收服务器发来的网络数据,
当判断为可写状态时,通过send函数来发送网络数据到服务器。
本发明提供的IOS系统中长连接网络数据分发及处理方法,还可以具有这样的特征,解密和解包的具体过程为:
使用加解密算法TEA进行解密,
解密完成后进行解析操作,解析出该网络数据对应的消息类型以及信息内容。
本发明提供的IOS系统中长连接网络数据分发及处理方法,还可以具有这样的特征:
当消息的内容时服务器错误时,则网络socket会进行网络重连;
当消息的内容为其他内容时,则经由应用层的object-c代码层被推送到IOS的应用层中。
本发明提供的IOS系统中长连接网络数据分发及处理方法,还可以具有这样的特征:
将C++层网络接收到的网络数据传递到应用层的object-c代码层的过程是由IOS系统自带的回调函数callback和Push函数实现的。
本发明提供的IOS系统中长连接网络数据分发及处理方法,还可以具有这样的特征:网络数据被推送到IOS的应用层后,应用层根据信息的类型分发到不同的模块来处理。
本发明提供的IOS系统中长连接网络数据分发及处理方法,还可以具有这样的特征:
所述客户端为网络直播客户端,所述服务器为网络直播服务器,
所述应用层为网络直播平台,
当消息类型为弹幕类型时,应用层会将该弹幕放到应用层的弹幕显示区域进行显示,
当消息类型为礼物类型时,应用层会将该礼物放到应用层的礼物显示区域进行显示,
当消息类型为连麦类型时,应用层会弹出连麦设置,开始连麦功能。
本发明还提供一种IOS系统中长连接网络数据分发及处理系统,其特征在于,包括:
网络接口模块,用于构建C++代码的网络接口进行长连接的网络数据的收发;
解密解包模块,对接收到的网络数据进行解密和解包;
传递模块,用于将C++层网络接收到的网络数据传递到应用层的object-c代码层;
推送模块,用于将网络数据由object-c代码层推送到IOS的应用层中。
本发明的作用和效果在于:根据本发明提供的IOS系统中长连接网络数据分发及处理方法,因为具有以下步骤:
使用C++代码编写IOS系统客户端的网络接口层进行长连接的网络数据的收发;对接收到的网络数据进行解密和解包;将C++层网络接收到的网络数据传递到应用层的object-c代码层;将网络数据由object-c代码层推送到IOS的应用层中,也就是说,应用层只需要处理消息类型的分发及对不同的消息类型进行处理,而对于接受消息,解密消息则都由C++底层代码来实现,总的结果就是使得IOS应用层的开发过程变得简单,效率提升。另一方面,使用C++代码来编写可以提供跨系统平台的特性,其可以使用在如Android、Windows、linux、IOS等系统平台上。
附图说明
图1为本发明的实施例中的IOS系统中长连接网络数据分发及处理方法的步骤示意图;
图2是本发明的实施例中网络接口层进行长连接的网络数据的收发步骤示意图;
图3是本发明的实施例中线程函数接收和发送网络数据的步骤示意图;以及
图4是本发明的实施例中IOS系统中长连接网络数据分发及处理系统的结构示意图。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,以下实施例结合附图对本发明的IOS系统中长连接网络数据分发及处理方法和系统的组成、结构、连接关系、具体工作流程以及工作原理、作用和效果做具体阐述作具体阐述。
以下以背景技术中的网络直播中,直播服务器通过网络通信对客户端进行长连接(长连接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包)来发送网络数据的情况进行详细说明。
实施例1
图1为本发明的实施例中的IOS系统中长连接网络数据分发及处理方法的步骤示意图。
如图1所示,本实施例的网络数据分发及处理方法具有步骤S1-S5。
步骤S1,使用C++代码编写IOS系统客户端的网络接口层进行长连接的网络数据的收发。
图2是本发明的实施例中网络接口层进行长连接的网络数据的收发步骤示意图。
本发明是针对移动智能终端或台式电脑IOS应用程序的,为了在网络通信的第三层传输层、第二层网络层和第一层网络接口来进行长连接的网络通信,需要使用C++代码开发网络收发数据的接口,即在第一层网络接口使用C++代码开发数据接口来在不同的操作系统之间进行运作,既可以使得其可以在不同的系统平台上执行,同时也可以提高其执行效率。具体的网络接口层进行长连接的网络数据的收发包括以下步骤:
步骤S1-1,在接收和分发网络数据的客户端和服务器之间创建网络socket。
长链接网络是通过编写socket程序来进行,所以首先需要创建一个网络套接字socket。具体则由IOS系统提供的API函数int sockfd:
int sockfd=socket(AF_INET,SOCK_STREAM,0);
来进行创建,其中,
socket则表示创建一个流式的网络套接字socket。
第一个参数AF_INET表示IPv4Internet协议。
第二个参数SOCK_STREAM标示Tcp连接,提供序列化的、可靠的、双向连接的字节流。
第三个参数则填为0。
步骤S1-2,设置网络socket的IP地址和端口号。
在设置好socket后,客户端在连接服务器前,需要填入服务器的IP地址和端口号来进行链接,只有指定了IP地址和对应的端口号,才能够链接到指定的服务器程序。
本实施例是通过定义一个网络地址的结构来存储设置的ip地址和端口号的,网络地址的结构为:
struct sockaddr_in serveraddr;
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=port;
serveraddr.sin_addr.s_addr=ip;
其中填入的port和ip就是服务器的ip地址和端口号。
步骤S1-3,客户端与服务器进行连接。
开始链接服务器。当创建好套接字网络socket,填好服务器地址后,则可以去链接服务器。IOS系统提供了一个相应的函数connect来链接服务器。函数如下:
int connect(int sockfd,const struct sockaddr*addr,socklen_t addrlen);
使用该函数,TCP网络的客户端通过connect函数与服务端连接,进行通信,其中,Sockfd是之前创建的网络套接字网络socket,Addr是之前创建的服务器的IP地址,Addrlen是IP地址数据的长度。
这样输入命令:
connect(sockfd,&serveraddr,sizeof(serveraddr));
运行connect函数,客户端就开始链接服务器。
步骤S1-4,使用线程函数来接收和发送网络数据。
使用Socket来编写程序接收服务器消息和发送服务器消息,该过程是一个IO(输入输出)操作,所以其会产生阻塞操作,为了程序能够流程的执行,则需要创建一个独立的线程函数来对网络消息进行收发操作,本实施例中使用IOS系统提供的相应的API函数pthread_create来创建线程函数。
使用API函数pthread_create进行线程创建的的函数如下:
int pthread_create(pthread_t*tidp,const pthread_attr_t*restrict_attr,void*(*start_rtn)(void*),void*restrict arg);
其中,第一个参数pthread_t*tidp为指向线程标识符的指针,第二个参数const pthread_attr_t*restrict_attr是用来设置线程属性,第三个参数void*(*start_rtn)(void*)是线程运行函数的起始地址,最后一个参数void*restrict arg是运行线程函数的参数。
图3是本发明的实施例中线程函数接收和发送网络数据的步骤示意图。
那么重要的则是线程函数,本实施例定义一个SocketRun作为线程函数,所述线程函数接收和发送网络数据的步骤包括:
步骤S1-4-1,SocketRun作为线程函数对网络socket的事件进行监听,由以下的命令代码实现:
线程函数则会编写while循环来对socket的事件进行监听和处理。
步骤S1-4-2,根据监听的情况,使用seletct函数来判断当前的网络socket是可读状态还是可写状态。
通过对socket使用select函数来进行判断当前sokcet收到服务器的消息处于可读状态还是可写状态,select函数即:
Ret=Select(socket);
通过select函数来判断当前套接字socket是可以读了,还是可以写了。
步骤S1-4-3,当判断为可读状态时,通过recv函数来接收服务器发来的网络数据。
如果判断为可读状态,则说明收到了服务器发送给客户端的消息,就通过recv函数来接收服务器的消息:
recv(socket,(char*)buf,len,0);
其中第一个参数socket是之前创建的socket,第二个参数(char*)buf是存储接收到的服务器的消息,第三个参数len是接收到的数据的长度,第四个参数不使用为0。
步骤S1-4-4,当判断为可写状态时,通过send函数来发送网络数据到服务器。
如果判断为可写状态,则说明当前socket可以发送数据到服务器了,就通过系统提供的send函数来发送消息到服务器:
send(socket,(char*)buf,(size_t)(len),0);
其中第一个参数socket是之前创建的socket,第二个参数(char*)buf是是已经写入了需要发送给服务器的数据,第三个参数(size_t)(len)是buf中数据的长度,第四个参数不使用为0。
线程函数则会编写while循环,此循环则会不断的处理接收服务器的消息数据,并且发送数据到服务器,至此,通过这个步骤就实现了客户端网络数据收发的处理。
步骤S2,对接收到的网络数据进行解密和解包。
服务器将消息发送到客户端,为了安全性,需要对消息进行加密处理。而客户端在收到服务器的消息后,需要对消息进行解密操作,同时解密完成后,可以解密出消息的消息类型,从而通过类型来进行消息的传递和下一步处理。
解密和解包的具体过程为:
首先,使用加解密算法TEA进行解密。
对于网络消息加解密本实施例使用轻量级的TEA加解密算法函数:
TEA.Decrypt(encryptbuf,len);
其中TEA.Decrypt是TEA解密数据的接口函数,参数encryptbuf是服务器发送的网络数据,也就是要加密的数据,参数len是数据的长度。
然后,在解密完成后进行解析操作,解析出该网络数据对应的消息类型以及信息内容。
解密完成后,对消息进行解包操作,从而可以解析出消息的类型,此条消息是什么,使用解包函数unpack:
Type=unpack(encryptbuf,len);
其中,unpack是对应的解包函数,其中输入的参数encryptbuf则是之前解密的服务器消息,参数len则是之前解密的服务器消息的长度。通过type就可以知道当前的网络消息是什么,具体是哪个类别。
至此,通过这个步骤就实现了对服务器的消息进行解密和解析的过程。
步骤S3,将C++层网络接收到的网络数据传递到应用层的object-c代码层。
为了更好的对消息的分发及处理进行管理,本实施例在C++层编写一个抽象的接口,提供给应用层object-c,抽象接口则定义了推送消息的接口和参数类型,将C++层网络接收到的网络数据传递到应用层的object-c代码层的过程是由IOS系统自带的回调函数callback和Push函数实现的。
具体将回调函数callback取名为ICallback,其具体代码如下:
编写一个虚的ICallback,从而防止内存泄露,其中接口名称是一个类,ICallback。
定义Push函数:OnPush,其函数格式为:
virtual void OnPush(const char*type,const char*message)=0;
}
定义了一个纯虚函数OnPush,其是本实施例编写的接口函数,其中参数const char*type表示消息的类型,参数const char*message表示消息。再定义一个接口函数SetCallback用于给object-c设置此接口的具体实例:
void SetCallback(ICallback*callback);
此接口函数是用于为应用层设置ICallback的具体实例的。
而对于C++层的底层,用来实现SetCallback函数存储应用层设置的接口实例的目的。
对于C++层来说,定义一个全局的ICallback指针用于存储应用程序的设置实例:
ICallback*g_callback=NULL;
然后在SetCallback中进行设置。
对于之前编写的网络解密服务器的数据和解析服务器的数据来说,在解析完成后,则会调用此回调函数callback来将消息传递到应用层的object-c的代码中,具体代码如下:
g_callback->OnPush(type,encryptbuf);
其中OnPush则是编写的接口。
其中type则是消息的类型。
其中encryptbuf则是之前服务器解密后解析的网络数据。
从而通过调用OnPush函数将C++层收到的网络解析后的数据传递到应用层object-c代码层。
至此,通过这个步骤就实现了通过使用C++编写对应的接口代码将底层收到的网络消息数据传递到应用层的object-c代码层中。
步骤S4,将网络数据由object-c代码层推送到IOS的应用层中。
网络数据被推送到IOS的应用层后,应用层根据信息的类型分发到不同的模块来处理。
对应用层代码来说,其需要实现对应的接口层的代码功能,也即是编写回调函数ICallback类的子类,并实现其中的存需Push函数OnPush,从而在c++代码层收到网络数据后,会通过调用应用层的OnPush接口代码,将网络数据推送到应用层中。
编写回调函数ICallback类的子类的代码为:
class CNetCallback public:ICallback
其中,CNetCallback继承自ICallback,其代码为:
{
public:
接口void OnPush(const char*type,const char*message){
其中CNetCallback类必须满足实现OnPush接口的功能,这样在底层C++代码调用时,实际调用的则是应用层编写的这个CNetCallback类的OnPush接口,如此,就实现了将C++的数据传递到IOS应用层的object-c代码层中。
在此OnPush接口函数中,应用层则可以依据消息的类型type来进行消息的分发,即应用层根据信息的类型分发到不同的模块来处理。
在本实施例中,所述客户端为网络直播客户端,所述服务器为网络直播服务器,所述应用层为网络直播平台的情况下,编写的代码为:If(type==“danmu”){
如果消息类型是“danmu”弹幕消息,则将弹幕放到应用层的弹幕显示区域进行显示。
}else if(type==“gift”){
如果消息类型是“gift”礼物消息,则将礼物显示到应用层的礼物区域。
}else if(type==“voicelink”){
如果消息类型是“voicelink”连麦消息,则应用层弹出连麦设置,开始连麦功能。
}
具体就是:
当消息类型为弹幕类型时,应用层会将该弹幕放到应用层的弹幕显示区域进行显示,
当消息类型为礼物类型时,应用层会将该礼物放到应用层的礼物显示区域进行显示,
当消息类型为连麦类型时,应用层会弹出连麦设置,开始连麦功能。
通过以上的过程,网络数据被推送到IOS的应用层后,应用层根据信息的类型分发到不同的模块来处理,如此,应用层只需要编写消息类型的分发实现的代码及应用程序要处理的消息类型的相应代码,而对于接受消息、解密消息则都由C++底层代码来实现,总的结果就是使得IOS应用层的开发过程变得简单,效率提升,而不用关注第三层传输层、第二层网络层的实现过程,使得IOS系统的客户端与服务器的网络数据分发过程的代码编写变得简单,也不用去考虑网络socket等在网络层和传输层如何实现的问题。
作为对本实施例的一种优化,在步骤S2中,当C++层网络接收到服务器的消息并对消息进行了解密及解包操作后,为了应对可能出现的服务器连接不上或是断线等情况,会存在一个判断步骤,对解密到的网络数据的内容进行判断:
当消息的内容是服务器错误时,则网络socket会进行网络重连;
当消息的内容为其他内容时,则经由应用层的object-c代码层被推送到IOS的应用层中。
也就是说,如果消息内容是“服务器错误”,则C++的Socket会进行网络重连,否则如果为其他的内容,则会推送到应用层的object-c的代码去处理和展示,例如是弹幕消息,就将弹幕放到应用层的弹幕显示区域进行显示。
实施例2
图4是本发明的实施例中IOS系统中长连接网络数据分发及处理系统的结构示意图。
以下对本实施例提供的IOS系统中长连接网络数据分发及处理系统结合附图进行详细说明。
如图4所示,IOS系统中长连接网络数据分发及处理系统100包括网络接口模块101、解密解包模块102、传递模块103、推送模块104。
网络接口模块101,用于构建C++代码的网络接口进行长连接的网络数据的收发。
解密解包模块102,对接收到的网络数据进行解密和解包。
传递模块103,用于将C++层网络接收到的网络数据传递到应用层的object-c代码层。
推送模块104,用于将网络数据由object-c代码层推送到IOS的应用层中。
具体的,网络接口模块101具有
Socket创建单元1011,用于在接收和分发网络数据的客户端和服务器之间创建网络socket。
设置单元1012,用于设置网络socket的IP地址和端口号。
连接单元1013,用于客户端与服务器进行连接。
接收和发送单元1014,用于使用线程函数来接收和发送网络数据。
具体的,接收和发送单元1014包括:
第一子单元,用于通过SocketRun线程函数对网络socket的事件进行监听;
第二子单元,用于根据监听的情况,使用seletct函数来判断当前的网络socket是可读状态还是可写状态
第三子单元,用于根据状态进行处理:
当判断为可读状态时,通过recv函数来接收服务器发来的网络数据
当判断为可写状态时,通过send函数来发送网络数据到服务器。
实施例3
本实施例还提供一种电子装置,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,其特征在于:处理器执行计算机程序时实现以下的方法:
步骤S1,使用C++代码编写IOS系统客户端的网络接口层进行长连接的网络数据的收发;
步骤S2,对接收到的网络数据进行解密和解包;
步骤S3,将C++层网络接收到的网络数据传递到应用层的object-c代码层;
步骤S4,将网络数据由object-c代码层推送到IOS的应用层中。
其中,网络接口层进行长连接的网络数据的收发包括以下过程:
步骤S1-1,在接收和分发网络数据的客户端和服务器之间创建网络socket;
步骤S1-2,设置网络socket的IP地址和端口号;
步骤S1-3,客户端与服务器进行连接;
步骤S1-4,使用线程函数来接收和发送网络数据。
而步骤S1-4中,所述线程函数接收和发送网络数据的步骤包括
步骤S1-4-1,对网络socket的事件进行监听,
步骤S1-4-2,根据监听的情况,使用seletct函数来判断当前的网络socket是可读状态还是可写状态,
步骤S1-4-2,当判断为可读状态时,通过recv函数来接收服务器发来的网络数据,
步骤S1-4-2,当判断为可写状态时,通过send函数来发送网络数据到服务器。
实施例4
以下对本实施例提供的存储介质进行详细说明。
一种存储介质,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现以下的方法:
步骤S1,使用C++代码编写IOS系统客户端的网络接口层进行长连接的网络数据的收发;
步骤S2,对接收到的网络数据进行解密和解包;
步骤S3,将C++层网络接收到的网络数据传递到应用层的object-c代码层;
步骤S4,将网络数据由object-c代码层推送到IOS的应用层中。
其中,网络接口层进行长连接的网络数据的收发包括以下过程:
步骤S1-1,在接收和分发网络数据的客户端和服务器之间创建网络socket;
步骤S1-2,设置网络socket的IP地址和端口号;
步骤S1-3,客户端与服务器进行连接;
步骤S1-4,使用线程函数来接收和发送网络数据。
而步骤S1-4中,所述线程函数接收和发送网络数据的步骤包括
步骤S1-4-1,对网络socket的事件进行监听,
步骤S1-4-2,根据监听的情况,使用seletct函数来判断当前的网络socket是可读状态还是可写状态,
步骤S1-4-3,当判断为可读状态时,通过recv函数来接收服务器发来的网络数据,
步骤S1-4-4,当判断为可写状态时,通过send函数来发送网络数据到服务器。
本实施例的作用和效果:根据本实施例提供的IOS系统中长连接网络数据分发及处理方法,因为具有以下步骤:
使用C++代码编写IOS系统客户端的网络接口层进行长连接的网络数据的收发;对接收到的网络数据进行解密和解包;将C++层网络接收到的网络数据传递到应用层的object-c代码层;将网络数据由object-c代码层推送到IOS的应用层中,也就是说,应用层只需要处理消息类型的分发及对不同的消息类型进行处理,而对于接受消息,解密消息则都由C++底层代码来实现,总的结果就是使得IOS应用层的开发过程变得简单,效率提升。另一方面,使用C++代码来编写可以提供跨系统平台的特性,其可以使用在如Android、Windows、linux、IOS等系统平台上。
因为,在步骤S2中,当C++层网络接收到服务器的消息并对消息进行了解密及解包操作后,为了应对可能出现的服务器连接不上或是断线等情况,会存在一个判断步骤,对解密到的网络数据的内容进行判断和处理,这样当消息内容是“服务器错误”,则C++的Socket会进行网络重连,否则如果为其他的内容,则会推送到应用层的object-c的代码去处理和展示,通过这个预先进行判断的过程能够保证在出现断线或连接不上的故障时,进行相应的处理。
进一步,使用线程函数对网络socket的事件进行监听,并根据监听的情况,使用seletct函数来判断当前的网络socket是可读状态还是可写状态,这样可以在不同的读写状态对应的安排发送和接收操作,具有针对性,不会出现读写状态和接收发送状态的不匹配。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。