一种进程间通信的方法及设备
技术领域
本发明涉及通信控制领域,尤其涉及一种进程间通信的方法及设备。
背景技术
Linux系统下的用户态的进程是操作系统动态执行的基本单元,是程序的一次执行过程,在同一平台(即同一主机)上,每个进程都在自己的地址范围内运行,由于处于用户态的不同进程之间是彼此相隔的,就像处于不同城市的人们,它们之间为了协同工作,需要通过某种方式来进行通信,为了解决这个问题,Linux操作系统提供了一些常用的进程间通信(Inter-Process Communication,简称IPC)方式,如管道、命名管道、信号、消息队列、共享内存和信号量等进程间通信方式实现同平台不同进程间的通信,但是,这些传统的同平台进程间通信方式具有以下两个缺点:
1)由于IPC结构在系统范围内起作用,没有访问计数,所以通信消息在系统范围内不方便删除控制;
2)由于IPC结构并不按名字为文件系统所知,即不采用文件描述操作,所以不能进行多路转接,不方便多路复用控制。
发明内容
本发明实施例提供一种进程间通信的方法及设备,采用网络套接字回环数据传输进行进程间通信,不仅通信消息不会在系统范围内起作用,而且便于多路复用或控制,同时,将目的地址设置为网络回环地址,在协议层实现数据转发,提高了进程间通信的速率。
为达到上述目的,本发明采用的技术方案是,
第一方面,本发明实施例提供一种进程间通信的方法,包括:
第一IPC模块接收第一进程发送的数据;
第一IPC模块将所述数据进行打包处理,形成数据包,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;
所述第一IPC模块向操作系统发送所述数据包,以使得所述操作系统根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;以及根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。
在第一方面的第一种可能的实现方式中,结合第一方面,在所述方法之前,还包括:
获取第一进程的端口号和第二进程的端口号的对应关系;
相应的,所述第一IPC模块将所述数据进行打包处理,形成数据包,包括:
根据所述第一进程的端口号和第二进程的端口号的对应关系,将所述第二进程的端口号设为所述包头中的目的进程的端口号。
第二方面,本发明实施例提供一种进程间通信的方法,包括:
操作系统接收第一IPC模块发送的数据包;其中,所述数据包包含包头和数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;
所述操作系统根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;
所述操作系统根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。
第三方面,本发明实施例提供一种进程间通信的方法,其特征在于,包括:
第二IPC模块接收操作系统发送的数据包,其中,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;
第二IPC模块根据预设的第二IPC模块的网络套接字和第二进程的端口号的对应关系,将所述包头中的目的进程的端口号与所述第二进程的端口号进行匹配;
若所述包头中的目的进程的端口号与所述第二进程的端口号匹配,则将所述数据包进行解析,获取所述数据;
向所述第二进程发送通知消息,所述通知消息中包含所述数据缓存的地址信息。
在第三方面的第一种可能的实现方式,结合第三方面,在所述第二IPC模块接收操作系统发送的数据包之前,所述方法还包括:
向所述操作系统发送请求信息;
接收所述操作系统分配的第二IPC模块的网络套接字;
建立所述第二IPC模块的网络套接字和第二进程的端口号之间的对应关系。
在第三方面的第二种可能的实现方式中,结合第三方面或第三方面的第一种可能的实现方式中的任一种实现方式,在所述第二IPC模块接收操作系统发送的数据包之前,所述方法还包括:
所述第二IPC模块接收所述第二进程发送的侦听指令;
所述第二IPC模块开始侦听其他IPC模块通过所述操作系统发送的数据包。
第四方面,本发明实施例提供一种第一IPC模块,包括:
接收单元,用于接收第一进程发送的数据;
数据处理单元,用于在所述接收单元接收到数据时,将所述数据进行打包处理,形成数据包,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;
发送单元,用于在所述数据处理单元形成的数据包时,向操作系统发送所述数据包,以使得所述操作系统根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;以及根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。
在第四方面的第一种可能的实现方式中,结合第四方面,所述IPC模块还包括:
获取单元,用于获取第一进程的端口号和第二进程的端口号的对应关系;
相应的,所述数据处理单元具体用于,
根据所述第一进程的端口号和第二进程的端口号的对应关系,将所述第二进程的端口号设为所述包头中的目的进程的端口号。
第五方面,本发明实施例提供一种操作系统,包括:
接收单元,用于接收第一IPC模块发送的数据包;其中,所述数据包包含包头和数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;
获取单元,用于在所述接收单元接收到数据包时,根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;
发送单元,用于在所述获取单元获取到与所述目的进程的端口号对应的网络套接字时,根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。
第六方面,本发明实施例提供一种第二IPC模块,包括:
接收单元,用于接收操作系统发送的数据包,其中,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;
检测单元,用于在所述接收单元接收到数据包时,根据预设的第二IPC模块的网络套接字和第二进程的端口号的对应关系,将所述包头中的目的进程的端口号与所述第二进程的端口号进行匹配;
解析单元,用于当所述检测单元检测到所述包头中的目的进程的端口号与所述第二进程的端口号匹配时,将所述数据包进行解析,获取所述数据;
发送单元,用于在所述解析单元解析出所述数据时,向所述第二进程发送通知消息,所述通知消息中包含所述数据缓存的地址信息。
在第六方面的第一种可能的实现方式中,结合第六方面,
所述发送单元,还用于在所述接收单元接收操作系统发送的数据包之前,向所述操作系统发送请求信息;
所述接收单元,还用于在所述发送单元发送请求消息时,接收所述操作系统分配的第二IPC模块的网络套接字;
所述第二IPC模块还包括:
绑定单元,用于在所述接收单元接收到所述操作系统分配的第二IPC模块的网络套接字时,建立所述第二IPC模块的网络套接字和第二进程的端口号之间的对应关系。
在第六方面的第二种可能的实现方式中,结合第六方面或第六方面的第一种可能的实现方式中的任一种实现方式,
所述接收单元,还用于在所述接收单元接收操作系统发送的数据包之前,接收所述第二进程发送的侦听指令;
所述第二IPC模块还包括:
侦听模块,用于在所述接收单元接收到侦听指令时,开始侦听其他IPC模块通过所述操作系统发送的数据包。
由上可知,本发明实施例提供一种进程通信的方法及设备,第一IPC模块接收第一进程发送的数据;将所述数据进行打包处理,形成数据包,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;向操作系统发送所述数据包,以使得所述操作系统根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;以及根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。如此,采用网络套接字进行进程间通信,不仅通信消息不会在系统范围内起作用,而且便于多路复用或控制,同时,将目的地址设置为网络回环地址,实现在协议层实现数据转发,提高了进程间通信的速率,避免了现有技术中通信消息在系统范围内不方便删除控制以及不方便多路复用控制的缺陷。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为嵌入式Linux操作系统同平台不同进程间通信的示意图;
图2为本发明实施例提供的一种进程间通信的方法的流程图;
图3为数据包结构示意图;
图4为本发明实施例提供的一种进程间通信的方法的流程图;
图5为本发明实施例提供的一种进程间通信的方法的流程图;
图6为本发明实施例提供的一种进程间通信的方法的流程图;
图7为本发明实施例提供的一种第一IPC模块的结构图;
图8为本发明实施例提供的一种操作系统的结构图;
图9为本发明实施例提供的一种操作系统的结构图;
图10为本发明实施例提供的一种第二IPC模块的结构图;
图11为本发明实施例提供的一种第二IPC模块的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的进程间通信的方法适用于嵌入式Linux操作系统同平台不同进程间的通信环境下,还可以适用于任意一个具有TCP/IP协议的操作系统(如Windows操作系统)同平台不同进程间的通信环境下,本发明实施例对此不进行限定,本发明实施例仅以图1所示的嵌入式Linux操作系统同平台不同进程间的通信为例进行说明。
如图1所示,嵌入式Linux操作系统下包含第一进程和第二进程,第一进程通过第一进程间通信(Inter-Process Communication,简称IPC)模块与第二进程进行通信,第二进程通过第二进程间通信(Inter-Process Communication,简称IPC)模块与第一进程进行通信,其中,第一IPC模块和第二IPC模块通过本发明实施例提供的进程间通信的方法实现数据传输,需要说明的是,嵌入式Linux操作系统包含至少两个不同进程,本发明实施例为了方便说明,仅以第一进程和第二进程这两个不同进程之间的通信为例进行说明。
实施例一
图2为本发明实施例提供一种进程间通信的方法的流程图,如图2所示,可以包括以下步骤:
201:第一IPC模块接收第一进程发送的数据。
优选的,第一IPC模块可以通过变量传输的方式接收第一进程发送的数据。
202:第一IPC模块将所述数据进行打包处理,形成数据包,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号。
其中,源地址为发送数据的进程所在设备的网络地址,本发明实施例中,为第一进程所在设备的网络地址,例如,第一进程所在设备的网络地址为192.168.0.1,则所述源地址为192.168.0.1;优选的,第一IPC模块可以通过函数调用获取源地址。
端口号为一个描述进程的整数型标识符,用于区别不同的进程,源进程的端口号用于标识源进程,目的进程的端口号用于标识目的进程;其中,源进程和目的进程是相对概念,根据数据传输的方向确定,源进程为发送数据的进程,目的进程为接收数据的进程,在不同进程间的通信过程中,源进程也可能为目的进程,目的进程也可能是源进程,本发明实施例中,源进程为第一进程,目的进程为第二进程,因此,源进程的端口号为第一进程的端口号,目的进程的端口号为第二进程的端口号;
优选的,端口号由操作系统采用全局分配的方式分配给相应的进程,例如,如表1所示,操作系统为第一进程分配的端口号为66,为第二进程分配的端口号为67,为第三进程分配的端口号为68,同时,端口号的分配结果为所有进程可知,当源进程需要向目的进程发送数据时,源进程的IPC模块可以通过函数调用根据端口号的分配结果获取自身的端口号和目的进程的端口号的对应关系;例如,本发明实施例中,第一进程需要向第二进程发送数据时,第一IPC模块可以根据表1所示的端口号分配结果获取第一进程的端口号和第二进程的端口号的对应关系,将源进程的端口号设置为66,目的进程的端口号设置为67。
表1
进程 |
端口号 |
第一进程 |
66 |
第二进程 |
67 |
第三进程 |
68 |
目的地址为接收数据的进程(即目的进程)所在设备的网络地址,本发明实施例中,第一IPC模块将所述目的地址设置为网络回环地址,如将目的地址设置为127.0.0.1,以使得数据通过设备的本地虚拟接口,在协议层进行传输。
优选的,第一IPC模块可以获取第一进程的端口号和第二进程的端口号的对应关系;根据用户数据包协议(User Datagram Protocol,简称UDP协议)UDP协议,将源地址,源进程的端口号,目的地址,目的进程的端口号与第一IPC模块接收到的数据封装在一起,生成数据包;例如,图3为数据包结构示意图,如图3所示,数据包包含包头和数据,包头中包含源地址,源进程的端口号,目的地址和目的进程的端口号四部分信息。
进一步的,第一IPC模块还可以将第一IPC模块发送数据用到的协议版本号封装在包头中。
203:第一IPC模块向操作系统发送所述数据包,以使得所述操作系统根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;以及根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。
由上可知,本发明实施例提供一种进程间通信的方法,第一IPC模块接收第一进程发送的数据;将所述数据进行打包处理,形成数据包,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;向操作系统发送所述数据包,以使得所述操作系统根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;以及根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。如此,采用网络套接字回环数据传输进行进程间通信,不仅通信消息不会在系统范围内起作用,而且便于多路复用或控制,同时,将目的地址设置为网络回环地址,在协议层实现数据转发,提高了进程间通信的速率;避免了现有技术中通信消息在系统范围内不方便删除控制以及不方便多路复用控制的缺陷。
实施例二
图4为本发明实施例提供的一种进程间通信的方法的流程图,如图4所示,可以包括以下步骤:
401:操作系统接收第一IPC模块发送的数据包;其中,所述数据包包含包头和数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址。
402:操作系统根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字。
其中,网络套接字为一个标识IPC模块的整数型标识符,用于区别不同的IPC模块,并且所述网络套接字为IPC模块自身可知;优选的,网络套接字可以由IPC模块向操作系统发出申请请求,操作系统根据所述申请请求向所述IPC模块返回相应的网络套接字;例如,第一IPC模块的网络套接字为301,第二IPC模块的网络套接字为302,第三IPC模块的套接字描述为303。
预设的端口号与网络套接字之间的对应关系为IPC模块根据需要将进程的端口号和IPC模块的网络套接字绑定在一起,即将进程与IPC模块的地址信息结合在一起,以使得操作系统根据所述进程的端口号找到相应的IPC模块;本发明实施例中,端口号与网络套接字之间的绑定为IPC模块通过调用bind()函数实现的。
优选的,在所述步骤之前,操作系统接收IPC模块发送的预设的端口号与网络套接字之间的对应关系,并将每个IPC模块发送的端口号与网络套接字之间的对应关系以预设形式存储到操作系统的存储区域,其中,预设形式为操作系统根据需要进行设置的,本发明实施例对此不进行限定。
例如,表2为端口号与套接字描述的对应关系表,如表2所示,第二进程的端口号为67,第二IPC模块的网络套接字为302,如果要将数据发送至第二IPC模块,则需根据第二进程的端口号67就可以实现将数据发送至网络套接字为302的第二IPC模块。
表2
进程 |
端口号 |
IPC模块 |
网络套接字 |
第一进程 |
66 |
第一IPC模块 |
301 |
第二进程 |
67 |
第二IPC模块 |
302 |
第三进程 |
68 |
第三IPC模块 |
303 |
403:操作系统根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。
进一步的,所述方法还包括:
操作系统接收第二IPC模块返回的数据包,进行异常处理;
其中,所述异常处理为操作系统重新执行步骤402,根据目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至对应的IPC模块。
由上可知,本发明实施例提供一种进程间通信的方法,操作系统接收第一IPC模块发送的数据包;其中,所述数据包包含包头和数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。如此,采用网络套接字回环数据传输进行进程间通信,不仅通信消息不会在系统范围内起作用,而且便于多路复用或控制,同时,将目的地址设置为网络回环地址,在协议层实现数据转发,提高了进程间通信的速率,避免了现有技术中通信消息在系统范围内不方便删除控制以及不方便多路复用控制的缺陷。
实施例三
图5为本发明实施例提供的一种进程间通信的方法的流程图,如图5所示,可以包括以下步骤:
501:第二IPC模块接收操作系统发送的数据包,其中,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址。
优选的,在本步骤之前,所述方法还包括:
第二IPC模块接收所述第二进程发送的侦听指令,开始侦听其他IPC模块通过所述操作系统发送的数据包。
502:第二IPC模块根据预设的第二IPC模块的网络套接字和第二进程的端口号的对应关系,将所述包头中的目的进程的端口号与所述第二进程的端口号进行匹配。
其中,预设的第二IPC模块的网络套接字和第二进程的端口的对应关系为第二IPC模块根据需要将第二进程的端口号和第二IPC模块的网络套接字绑定在一起,将第二进程与第二IPC模块的地址信息联系起来。
优选的,第二IPC模块可以通过下述步骤(1)-(3)预设第二IPC模块的网络套接字和第二进程的端口号的对应关系:
(1)第二IPC模块向所述操作系统发送请求信息。
其中,所述请求信息用于指示为第二IPC模块创建网络套接字。
(2)接收所述操作系统分配的第二IPC模块的网络套接字。
(3)建立所述第二IPC模块的网络套接字和第二进程的端口号之间的对应关系。
优选的,第二IPC模块可以通过调用bind()函数将所述第二IPC模块的网络套接字和第二进程的端口号绑定,建立所述第二IPC模块的网络套接字合第二进程的端口号之间的对应的关系,例如,如表2所示,第二进程的端口号为67,第二IPC模块的网络套接字为302。
503:若所述包头中的目的进程的端口号与所述第二进程的端口号匹配,则将所述数据包进行解析,获取所述数据。
优选的,第二IPC模块可以查看接收到的数据包的包头,判断所述包头中的目的进程的端口号与所述第二进程的端口号是否匹配,即判断所述数据包是否为发往第二进程的数据包;
若所述包头中目的进程的端口号与第二进程的端口号相同,则确定所述数据包为发往第二进程的数据包,去掉数据包的包头,获取所述数据;
若所述包头中目的进程的端口号与第二进程的端口号不同,则确定所述数据包不是发往第二进程的数据包,将所述数据包返回给操作系统;例如,第二进程的端口号为67,接收到的数据包包头中目的进程的端口号为68,则确定所述数据包不是发往第二进程的数据包。
504:向所述第二进程发送通知消息,所述通知消息中包含所述数据缓存的地址信息。
由上可知,本发明实施例提供一种进程间通信的方法,第二IPC模块接收操作系统发送的数据包,其中,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;根据预设的第二IPC模块的网络套接字和第二进程的端口号的对应关系,将所述包头中的目的进程的端口号与所述第二进程的端口号进行匹配;若所述包头中的目的进程的端口号与所述第二进程的端口号匹配,则将所述数据包进行解析,获取所述数据;向所述第二进程发送通知消息,所述通知消息中包含所述数据缓存的地址信息。如此,采用网络套接字回环数据传输进行进程间通信,不仅通信消息不会在系统范围内起作用,而且便于多路复用或控制,同时,将目的地址设置为网络回环地址,在协议层实现数据转发,提高了进程间通信的速率,避免了现有技术中通信消息在系统范围内不方便删除控制以及不方便多路复用控制的缺陷。
下面通过实施例四对本发明实施例提供的进程间通信的方法进行具体说明。
实施例四
图6为本发明实施例提供的一种进程间通信的方法的流程图,其中,所述方法应用于如图1所示的操作系统下,并且在所述方法执行之前,第一IPC模块以及第二IPC模块分别进行下述步骤(1)-(5)的初始化过程:
(1)获取进程的端口号。
其中,需要说明的是,IPC模块获取所述IPC模块所在进程的端口号以及其他IPC模块所在进程的端口号。
(2)向所述操作系统发送请求信息;其中,所述请求信息用于指示为IPC模块创建网络套接字。
(3)接收所述操作系统分配的网络套接字。
(4)建立所述网络套接字和端口号之间的对应关系,并向所述操作系统发送所述对应关系,以使得所述操作系统获知网络套接字和端口号之间的对应关系。
其中,所述建立所述网络套接字和端口号之间的对应关系包括:将所述网络套接字和所述网络套接字对应的IPC模块所在的进程的端口号通过bind()函数绑在一起;
(5)接收进程发送的侦听指令,开始侦听其他IPC模块通过所述操作系统发送的数据包。
其中,所述进程为IPC模块所在的进程。
在上述初始化过程之后,本发明实施例提供的进程间通信的方法,如图6所示,可以包括以下步骤:
601:第一进程向第一IPC模块发送数据。
602:第一IPC模块将所述数据进行打包处理,形成数据包,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址。
603:第一IPC模块向操作系统发送数据包。
604:操作系统根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字。
605:操作系统向第二IPC模块发送数据包。
606:第二IPC模块判断数据包是否为发往第二进程的数据包;若数据包是发往第二进程的数据包,则执行步骤607。
若数据包不是发往第二进程的数据包,则第二IPC模块将所述数据包发送给操作系统;
操作系统对所述数据包进行异常处理。
607:第二IPC模块将所述数据包进行解析,获取所述数据。
608:第二IPC模块向第二进程发送通知消息,所述通知消息中包含所述数据缓存的地址信息。
其中,需要说明的是,第二IPC模块也可以采用所述进程间通信的方法向第一进程发送数据。
由上可知,本发明实施例提供一种进程间通信的方法,第一进程向第一IPC模块发送数据。第一IPC模块将所述数据进行打包处理,形成数据包,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址。第一IPC模块向操作系统发送数据包。操作系统根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;操作系统向第二IPC模块发送数据包。第二IPC模块判断数据包是否为发往第二进程的数据包。第二IPC模块根据预设的第二IPC模块的网络套接字和第二进程的端口号的对应关系,将所述包头中的目的进程的端口号与所述第二进程的端口号进行匹配;第二IPC模块将所述数据包进行解析,获取所述数据。第二IPC模块向第二进程发送通知消息,所述通知消息中包含所述数据缓存的地址信息。如此,采用网络套接字回环数据传输进行进程间通信,不仅通信消息不会在系统范围内起作用,而且便于多路复用或控制,同时,将目的地址设置为网络回环地址,在协议层实现数据转发,提高了进程间通信的速率,避免了现有技术中通信消息在系统范围内不方便删除控制以及不方便多路复用控制的缺陷。
实施例五
图7为本发明实施例提供的一种第一IPC模块70的结构图,如图7所示,包括:
接收单元701,用于接收第一进程发送的数据。
数据处理单元702,用于在所述接收单元接收到数据时,将所述数据进行打包处理,形成数据包,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址。
其中,源地址为发送数据的进程所在设备的网络地址,本发明实施例中,为第一进程所在设备的网络地址,例如,第一进程所在设备的网络地址为192.168.0.1,则所述源地址为192.168.0.1。
端口号为一个描述进程的整数型标识符,用于区别不同的进程,源进程的端口号用于标识源进程,目的进程的端口号用于标识目的进程;其中,源进程和目的进程是相对概念,根据数据传输的方向确定,源进程为发送数据的进程,目的进程为接收数据的进程,在不同进程间的通信过程中,源进程也可能为目的进程,目的进程也可能是源进程,本发明实施例中,源进程为第一进程,目的进程为第二进程,因此,源进程的端口号为第一进程的端口号,目的进程的端口号为第二进程的端口号;
优选的,端口号由操作系统采用全局分配的方式分配给相应的进程,例如,如表1所示,操作系统为第一进程分配的端口号为66,为第二进程分配的端口号为67,为第三进程分配的端口号为67,同时,端口号的分配结果为所有进程可知,当源进程需要向目的进程发送数据时,源进程的IPC模块可以通过函数调用根据端口号的分配结果获取自身的端口号和目的进程的端口号。
目的地址为接收数据的进程(即目的进程)所在设备的网络地址,本发明实施例中,将所述目的地址设置为网络回环地址,如将目的地址设置为127.0.0.1,以使得数据通过设备的本地虚拟接口,在协议层进行传输。
发送单元703,用于在所述数据处理单元形成的数据包时,向操作系统发送所述数据包,以使得所述操作系统根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;以及根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。
进一步的,所述接收单元701具体用于,通过变量传输的方式接收第一进程发送的数据。
所述数据处理单元702具体用于,获取第一进程的端口号和第二进程的端口号的对应关系,在所述接收单元接收到数据时,根据用户数据包协议(User DatagramProtocol,简称UDP协议)UDP协议,将源地址,源进程的端口号,目的地址,目的进程的端口号与第一IPC模块接收到的数据封装在一起,生成数据包;例如,图3为数据包结构示意图,如图3所示,数据包包含包头和数据,包头中包含源地址,源进程的端口号,目的地址和目的进程的端口号四部分信息。
进一步的,所述数据处理单元,还用于将第一IPC模块发送数据用到的协议版本号封装在包头中。
由上可知,本发明实施例提供一种第一IPC模块,接收第一进程发送的数据;将所述数据进行打包处理,形成数据包,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;向操作系统发送所述数据包,以使得所述操作系统根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;以及根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。如此,采用网络套接字回环数据传输进行进程间通信,不仅通信消息不会在系统范围内起作用,而且便于多路复用或控制,同时,将目的地址设置为网络回环地址,在协议层实现数据转发,提高了进程间通信的速率,避免了现有技术中通信消息在系统范围内不方便删除控制以及不方便多路复用控制的缺陷。
实施例六
图8为本发明实施例提供的一种操作系统80的结构图,如图8所示,包括:
接收单元801,用于接收第一IPC模块发送的数据包;其中,所述数据包包含包头和数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址。
获取单元802,用于在所述接收单元接收到数据包时,根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字。
其中,网络套接字为一个标识IPC模块的整数型标识符,用于区别不同的IPC模块,并且所述网络套接字为IPC模块自身可知;优选的,网络套接字可以由IPC模块向操作系统发出申请请求,操作系统根据所述申请请求向所述IPC模块返回相应的网络套接字;例如,第一IPC模块的网络套接字为301,第二IPC模块的网络套接字为302,第三IPC模块的套接字描述为303。
预设的端口号与网络套接字之间的对应关系为IPC模块根据需要将进程的端口号和IPC模块的网络套接字绑定在一起,即将进程与IPC模块的地址信息结合在一起,以使得操作系统根据所述进程的端口号找到相应的IPC模块;例如,表2为端口号与套接字描述的对应关系表,如表2所示,第二进程的端口号为67,第二IPC模块的网络套接字为302,如果要将数据发送至第二IPC模块,则需根据第二进程的端口号67就可以实现将数据发送至网络套接字为302的第二IPC模块。
发送单元803,用于在所述获取单元获取到与所述目的进程的端口号对应的网络套接字时,根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。
进一步的,所述接收单元801还用于,在获取单元802获取与所述目的进程的端口号对应的网络套接字之前,接收IPC模块发送的预设的端口号与网络套接字之间的对应关系,并将每个IPC模块发送的端口号与网络套接字之间的对应关系以预设形式存储到操作系统的存储区域,其中,预设形式为操作系统根据需要进行设置的,本发明实施例对此不进行限定。
进一步的,所述接收单元801还用于,接收第二IPC模块返回的数据包;
相应的,如图9所示,所述操作系统80还包括:
异常处理单元803:,用于在所述接收单元801接收到第二IPC模块返回的数据包时,进行异常处理;
示例性的,所述异常处理单元803具体用于,根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;根据目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至对应的IPC模块。
由上可知,本发明实施例提供一种操作系统80,接收第一IPC模块发送的数据包;其中,所述数据包包含包头和数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;根据所述数据包中的目的进程的端口号查询预设的端口号与网络套接字之间的对应关系,获取与所述目的进程的端口号对应的网络套接字;根据所述目的地址和与所述目的进程的端口号对应的网络套接字将所述数据包发送至第二IPC模块。如此,采用网络套接字回环数据传输进行进程间通信,不仅通信消息不会在系统范围内起作用,而且便于多路复用或控制,同时,将目的地址设置为网络回环地址,在协议层实现数据转发,提高了进程间通信的速率,避免了现有技术中通信消息在系统范围内不方便删除控制以及不方便多路复用控制的缺陷。
实施例七
图10为本发明实施例提供的一种第二IPC模块90的结构图,如图10所示,包括:
接收单元901,用于接收操作系统发送的数据包,其中,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址。
检测单元902,用于在所述接收单元接收到数据包时,根据预设的第二IPC模块的网络套接字和第二进程的端口号的对应关系,将所述包头中的目的进程的端口号与所述第二进程的端口号进行匹配。
其中,预设的第二IPC模块的网络套接字和第二进程的端口的对应关系为第二IPC模块根据需要将第二进程的端口号和第二IPC模块的网络套接字绑定在一起,将第二进程与第二IPC模块的地址信息联系起来。
解析单元903,用于当所述检测单元检测到所述包头中的目的进程的端口号与所述第二进程的端口号匹配时,将所述数据包进行解析,获取所述数据。
发送单元904,用于在所述解析单元解析出所述数据时,向所述第二进程发送通知消息,所述通知消息中包含所述数据缓存的地址信息。
进一步的,所述检测单元902,具体用于在所述接收单元901接收到数据包时,查看数据包的包头,判断所述包头中的目的进程的端口号与所述第二进程的端口号是否匹配,即判断所述数据包是否为发往第二进程的数据包;
若所述包头中目的进程的端口号与第二进程的端口号相同,则确定所述数据包为发往第二进程的数据包;若所述包头中目的进程的端口号与第二进程的端口号不相同,则确定所述数据包不是发往第二进程的数据包;例如,第二进程的端口号为67,接收到的数据包包头中目的进程的端口号为68,则确定所述数据包不是发往第二进程的数据包。
进一步的,所述解析单元903,具体用于在所属检测单元902确定所述数据包为发往第二进程的数据包时,去掉数据包的包头,获取所述数据。
进一步的,所述发送单元904,还用于在所述检测单元902确定所述数据包不是发往第二进程的数据包时,将所述数据包返回给操作系统;
进一步的,所述发送单元904,还用于在所述接收单元接收操作系统发送的数据包之前,向所述操作系统发送请求信息;
所述接收单元901,还用于在所述发送单元901发送请求消息时,接收所述操作系统分配的第二IPC模块的网络套接字;
相应的,如图11所示,所述第二IPC模块90还包括:
绑定单元905,用于在所述接收单元接收到所述操作系统分配的第二IPC模块的网络套接字时,建立所述第二IPC模块的网络套接字和第二进程的端口号之间的对应关系。
进一步的,所述接收单元901,还用于在所述接收单元901接收操作系统发送的数据包之前,接收所述第二进程发送的侦听指令;
相应的,如图11所示,所述第二IPC模块90还包括:
侦听单元906,用于在所述接收单元接收到侦听指令时,开始侦听其他IPC模块通过所述操作系统发送的数据包。
由上可知,本发明实施例提供一种第二IPC模块90,接收操作系统发送的数据包,其中,所述数据包包含包头和所述数据,所述包头包含源地址、源进程的端口号、目的地址和目的进程的端口号,其中,所述目的地址为网络回环地址;根据预设的第二IPC模块的网络套接字和第二进程的端口号的对应关系,将所述包头中的目的进程的端口号与所述第二进程的端口号进行匹配;若所述包头中的目的进程的端口号与所述第二进程的端口号匹配,则将所述数据包进行解析,获取所述数据;向所述第二进程发送通知消息,所述通知消息中包含所述数据缓存的地址信息。如此,采用网络套接字回环数据传输进行进程间通信,不仅通信消息不会在系统范围内起作用,而且便于多路复用或控制,同时,将目的地址设置为网络回环地址,在协议层实现数据转发,提高了进程间通信的速率,避免了现有技术中通信消息在系统范围内不方便删除控制以及不方便多路复用控制的缺陷。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。