本发明实施例涉及流量监控技术,尤其涉及一种监控应用程序使用流量的方法、装置及终端。
背景技术:
随着信息技术的发展,智能手机等终端中的应用程序越来越多,有些恶意应用程序存在偷跑流量的情况,会将该流量划分到系统中。
对于当前的Android手机,流量统计的功能是根据socket链接中的UID来区分的,根据UID来将对应流量划分给具体的应用程序。对于UID小于系统UID(SYSTEM_UID)的socket链接,流量的消耗都被统计到Android系统中,这就导致共享SYSTEM_UID和下行找不到socket的数据类型的流量都划分到了Android系统,最终导致用户看到Android系统消耗流量过大,即现有针对流量来源的统计信息不准确。
技术实现要素:
本发明实施例提供一种监控应用程序使用流量的方法、装置及终端,可以提高针对流量来源进行流量消耗统计的准确性。
第一方面,本发明实施例提供了一种监控应用程序使用流量的方法,所述方法包括:
在网络传输建立时,创建传输层sock数据结构和socket链接,并将网络传输所对应的应用程序的UID添加到传输层sock数据结构的UID字段中;
在传输数据时,查找所述数据对应的传输层sock数据结构并获取对应的UID;
根据传输层sock数据结构中的UID,确定传输数据对应的应用程序。
第二方面,本发明实施例还提供了一种监控应用程序使用流量的装置,所述装置包括:
UID添加模块,用于在网络传输建立时,创建传输层sock数据结构和socket链接,并将网络传输所对应的应用程序的UID添加到传输层sock数据结构的UID字段中;
UID获取模块,用于在传输数据时,查找所述数据对应的传输层sock数据结构并获取对应的UID;
应用程序确定模块,用于根据传输层sock数据结构中的UID,确定传输数据对应的应用程序。
第三方面,本发明实施例还提供了一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
在网络传输建立时,创建传输层sock数据结构和socket链接,并将网络传输所对应的应用程序的UID添加到传输层sock数据结构的UID字段中;
在传输数据时,查找所述数据对应的传输层sock数据结构并获取对应的UID;
根据传输层sock数据结构中的UID,确定传输数据对应的应用程序。
本发明实施例的技术方案,通过在网络传输建立时,创建传输层sock数据结构和socket链接,并将网络传输所对应的应用程序的UID添加到传输层sock数据结构的UID字段中,在传输数据时,查找所述数据对应的传输层sock数据结构并获取对应的UID,根据传输层sock数据结构中的UID,确定传输数据对应的应用程序,从而解决了在socket数据结构或者对应的文件被销毁时将消耗的流量划分到Android系统的问题,可以将消耗的流量划分到对应的应用程序中,提高了针对流量来源进行流量消耗统计的准确性。
附图说明
图1是本发明实施例提供的一种监控应用程序使用流量的方法的流程图;
图2是现有技术中确定数据对应的应用程序的示意图;
图3是本发明实施例提供的监控应用程序使用流量的方法中的确定数据对应的应用程序的示意图;
图4是本发明实施例提供的监控应用程序使用流量的方法中的记录链接信息的红黑树的示意图;
图5是本发明一个实施例提供的一种监控应用程序使用流量的方法的流程图;
图6是本发明实施例提供的一种监控应用程序使用流量的装置的结构示意图;
图7为本发明实施例提供的一种终端的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
图1是本发明实施例提供的一种监控应用程序使用流量的方法的流程图,本实施例可适用于监控每个应用程序使用流量的情况,该方法可以由监控应用程序使用流量的装置来执行,该装置可以由硬件和/或软件来实现,一般可集成于手机等终端中。该方法包括如下步骤:
步骤110,在网络传输建立时,创建传输层sock数据结构和socket链接,并将网络传输所对应的应用程序的UID添加到传输层sock数据结构的UID字段中。
计算机每个用户都具有一个UID(User Identification,用户标识),程序的UID标识开启该程序的用户。而Android系统中每个应用程序都有一个UID,Android系统也有一个SYSTEM_UID(例如1000是Android系统的UID),默认情况下,Android系统会给每个应用程序分配一个普通级别互不相同的UID,如果互相调用,必须是相同UID,从而使得共享数据具有了一定安全性,每个应用程序之间是不能随意获得数据的。
socket即套接字,是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用,以实现应用程序的进程在网络中的通信。
建立网络传输即建立服务器socket与客户端socket之间的链接,即socket链接,可以通过三次握手来建立:第一次握手,客户端尝试连接服务器,向服务器发送SYN(Synchronize Sequence Numbers,同步序列编号)包,syn=j,客户端进入SYN_SENT状态等待服务器确认;第二次握手,服务器接收客户端SYN包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手,客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。其中,SYN_SEND状态、SYN_RECV状态和ESTABLISHED状态均是网络链接状态,表1是网络链接状态与对应说明的表。
表1网络连接状态与对应说明
sock数据结构是位于内核中协议栈传输层的数据结构,在应用层有对应的socket数据结构,在socket数据结构中有一个指向sock数据结构的指针,在sock数据结构中有一个指向socket数据结构的指针,从而建立了socket数据结构和sock数据结构之间的链接关系。其中,sock数据结构保存与通信关系密切的数据,socket数据结构保存与文件系统关系密切的数据。
预先在协议栈传输层sock数据结构中添加UID字段,当创建socket链接时创建对应的sock数据结构,并对该UID字段进行赋值,即将socket链接对应的应用程序的UID赋值给sock数据结构中的UID字段,该sock数据结构的生命周期直到socket链接完全关闭。在网络传输建立时,创建socket链接,同时创建保存相关数据的传输层sock数据结构和应用层的socket数据结构,并将该网络传输即socket链接所对应的应用程序的UID添加到传输层sock数据结构的UID字段中。
步骤120,在传输数据时,查找所述数据对应的传输层sock数据结构并获取对应的UID。
传输数据包括接收数据和发送数据。在传输数据时,通过sk_buff结构体中的struct sock*sk指针来查找传输数据的socket链接对应的sock数据结构,从sock数据结构中获取对应的UID。struct sock*sk指针指向一个socket链接的sock数据结构,当数据在本地产生或者本地进程接受时,需要这个指针;里面的数据会由tcp/udp和用户态程序使用,如果是转发则此指针为NULL。
图2是现有技术中确定数据对应的应用程序的示意图,如图2所示,在传输数据时,通过sk_buff结构体中指向sock数据结构的指针查找对应的sock数据结构,如果sock不为空,则是终端发送数据,可以直接找到对应的sock数据结构;如果sock为空,则是终端接收数据,可以通过记录网络链接状态的哈希表查找对应的sock数据结构,如果没有查找到sock数据结构,则找不到该数据对应的应用程序,将数据丢弃,将流量划分到Android系统中;如果通过sk_buff结构体或者记录网络链接状态的哈希表(hash list)找到对应的sock数据结构,而此时socket链接状态为TIME_WAIT状态,则也确定丢失应用程序,即找不到数据对应的应用程序,这时将流量划分到Android系统中;在找到sock数据结构后,且socket链接不处于TIME_WAIT状态,再查找对应的socket数据结构,如果在sock数据结构中指向socket的数据结构的指针socke为空,则表明socket数据结构已经被销毁,确定找不到数据对应的应用程序,这时将流量划分到Android系统中;如果在sock数据结构中指向socket数据结构的指针socke不为空,则查找到对应的socket数据结构,再根据socket数据结构中指向对应的文件的指针file来查找对应的文件,如果socket数据结构中指向对应的文件的指针file为空,则表明对应的文件被销毁,无法数据对应的应用程序,这时将流量划分到Android系统中;如果socket数据结构中指向对应的文件的指针file不为空,则找到对应的文件,根据文件中的内容,确定对应的应用程序的UID,从而将流量划分到对应的应用程序中。
与之对应的,有以下四种情况会导致流量被划分到Android系统:
一部分下行流量,当运营商路由到手机等终端时,发现对应的socket链接已经处于TIME_WAIT状态或socket链接对应的file(文件)已经被销毁,就会把这部分流量划分到Android系统;
一部分上行流量,当数据包到达netfilter框架的LOCAL_OUT这个hook时,对应socket链接的file对象被销毁,这部分也会划分到Android系统;
一部分无良应用,如某提供图片流量的应用程序,在用户浏览图片完毕时,会存在偷跑流量的情况,在该应用程序的socket链接断开后,仍然会有很多1480字节的无用报文发来,系统在路由时,找不到对应的接收者,就会把这部分流量划分到Android系统内,同时由于已经经过了运营商的路由,所以已经开始产生了资费;
类似DOS攻击的偷跑流量,手机等终端可以丢弃数据,但已经经过了运营商网关,产生了资费。
上述无良应用或者DOS攻击导致流量划分到Android系统的情况即对应图2中找不到sock数据结构的情况。其中,netfilter框架为Linux内核中的一个强大的网络子系统,在数据包处理流程的5个关键位置定义了5个hook(钩子)函数。5个hook函数分别为PRE_ROUTING、LOCAL_IN、RORWARD、LOCAL_OUT和POST_ROUTING。
图3是本发明实施例提供的监控应用程序使用流量的方法中的确定数据对应的应用程序的示意图,如果3所示,在传输数据时,如果通过sk_buff结构体或者记录网络链接状态的哈希表找到对应的sock数据结构,就可以直接通过sock数据结构中的UID字段的值将传输该数据产生的流量划分到对应的应用程序中,即使socket链接处于TIME_WAIT状态或者是对应的文件被销毁,也可以将传输该数据产生的流量划分到对应的应用程序中。在找到sock数据结构时,获取UID,划分到对应的应用程序中,并对链接信息和UID的对应关系进行记录;在找不到sock数据结构时,记录链接信息,与可以找到sock数据结构的正常通信情况进行匹配,得到对应的UID,划分到对应的应用程序中。
其中,在传输数据时,查找所述数据对应的sock数据结构并获取对应的UID,可选包括:
在传输数据时,查找所述数据对应的sock数据结构;
在查找到对应的sock数据结构时,记录传输数据的链接信息及对应的UID,作为第一链接信息,并记录第一链接信息和UID的对应关系;
如果没有对应的sock数据结构,则记录传输数据的链接信息,作为第二链接信息,根据所述第二链接信息,在所述对应关系中查找对应的UID。
由于找不到sock数据结构的情况一般是无良应用或者DOS攻击导致的偷跑流量的情况,这种情况需要服务器知道该终端的IP地址等信息,因此服务器和该终端必然进行过正常通信,因此,可以对正常通信情况的链接信息和UID进行记录,在出现找不到sock数据结构的情况时匹配来查找对应的应用程序。在记录所述对应关系和第二链接信息时,可以分别用两个哈希表来记录,也可以分别用两个如图4所示的红黑树来记录。在图4中,黑色的节点表示黑色节点,白色的节点表示红色节点。其中,哈希表是根据关键码值(Key value)而直接进行访问的数据结构,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数,存放记录的数组叫做哈希表。红黑树(Red Black Tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组,在相应的节点中保存索引和对应的UID,索引是通过链接信息计算得到的。
在传输数据时,查找所述数据对应的sock数据结构,如果查找到对应的sock数据结构,则可以确定传输数据的socket链接,获取该socket链接的链接信息,作为第一链接信息,并获取sock数据结构中存储的UID,记录第一链接信息和UID的对应关系,根据UID可以确定出对应的应用程序。在每次传输数据查找到sock数据结构时均要记录对应的第一链接信息和UID的对应关系,作为找不到sock数据结构时将传输数据产生的流量划分到具体的应用程序中的参考。在传输数据时,如果没有查找到对应的sock数据结构,即没有对应的sock数据结构,则记录传输该数据的链接信息,作为第二链接信息,根据第二链接信息,查找所述第一链接信息和UID的对应关系中与第二链接信息相同的第一链接信息,则该第一链接信息对应的UID为与第二链接信息对应的UID,进而可以确定对应的应用程序。其中,所述链接信息优选包括服务器的IP地址、端口和协议。
其中,在传输数据时,查找所述数据对应的sock数据结构,可选包括:
在接收到数据时,在记录网络链接状态的第一哈希表中查找所述数据所属的socket链接的状态;
如果查找到所述数据所属的socket链接的状态,则查找对应的sock数据结构;如果没有查找到所述数据所属的socket链接的状态,则确定没有对应的sock数据结构。
发送数据时,可以直接根据sk_buff结构体直接找到对应的sock数据结构。而接收到数据时,根据数据的报文头获取该数据的发送方的IP地址、端口及协议,根据IP地址、端口及协议,在记录网络链接状态的第一哈希表中查找该数据所属的socket链接的状态,如果查找到所述数据所属的socket链接的状态,则根据该socket链接查找到对应的sock数据结构,如果没有查找所述数据所属的socket链接的状态,则确定没有对应的sock数据结构。其中,第一哈希表中记录的网络链接状态为除CLOSED状态以外的状态。
可选的,记录传输数据的链接信息及对应的UID,作为第一链接信息,并记录第一链接信息和UID的对应关系,包括:
根据所述数据,获取传输数据的链接信息,作为第一链接信息;
以第一链接信息为索引,通过第二哈希表记录对应的UID,作为第一链接信息和UID的对应关系;
记录传输数据的链接信息,作为第二链接信息包括:
根据所述数据,获取传输数据的链接信息,作为第二链接信息;
通过第三哈希表记录所述第二链接信息。
根据数据的报文头,获取传输数据的链接信息,作为第一链接信息,并从对应的sock数据结构中获取对应的UID,通过第二哈希表来记录第一链接信息和UID的对应关系,即以第一链接信息为索引,保存对应的UID。在记录第二链接信息时,通过第三哈希表来记录,将第二链接信息作为索引。当传输数据找不到sock数据结构时,第三哈希表哈希出的索引去第二哈希表中搜索对应的UID,返回的UID即是传输数据消耗流量的应用程序的UID。也可以通过第一红黑树来记录第一链接信息和UID的对应关系,即第一链接信息为索引,保存对应的UID;通过第二红黑树来记录第二链接信息,以第二链接信息为索引,对应的UID为0。
步骤130,根据传输层sock数据结构中的UID,确定传输数据对应的应用程序。
根据查找到的sock数据结构,获取其中的UID,由于UID与应用程序是对应的,由此可以确定与传输该数据对应的应用程序,即确定传输数据消耗流量的应用程序。
本实施例的技术方案,通过在网络传输建立时,创建传输层sock数据结构和socket链接,并将网络传输所对应的应用程序的UID添加到传输层sock数据结构的UID字段中,在传输数据时,查找所述数据对应的传输层sock数据结构并获取对应的UID,根据传输层sock数据结构中的UID,确定传输数据对应的应用程序,从而解决了在socket数据结构或者对应的文件被销毁时将消耗的流量划分到Android系统的问题,可以将消耗的流量划分到对应的应用程序中,提高了针对流量来源进行流量消耗统计的准确性。
在上述技术方案的基础上,还优选包括:
根据所述UID,统计对应的应用程序在第一预设时间内消耗的流量;
如果应用程序在第一预设时间内消耗的流量大于预设阈值,则关闭终端的数据流量,并在关闭第二预设时间后再次打开所述数据流量。
根据UID,统计对应的应用程序在第一预设时间内消耗的流量,如果一个应用程序在第一预设时间内消耗的流量大于预设阈值,则关闭终端的数据流量,并在关闭第二预设时间后再次打开所述数据流量。由于无良应用或者DOS攻击等偷跑流量的情况一般是大量突发的流量,所以与预设阈值进行比较,如果一个应用程序在第一预设时间内消耗的流量大于预设阈值,则确定该应用程序在偷跑流量,这时为了避免产生过多的流量费用,关闭数据流量,然后再次打开,不影响用户的正常使用。数据流量关闭后,运营商网关会将应用程序的服务器到该终端的路由信息清除掉,从而再次打开终端的数据流量时,由于路由信息已被清除掉,应用程序的服务器通过运营商网关无法路由到该终端,进而不再产生流量的资费,为用户节省了流量,进而节省了流量费用。
图5是本发明一个实施例提供的一种监控应用程序使用流量的方法的流程图,如图5所示,该方法包括如下步骤:
步骤510,在网络传输建立时,创建传输层sock数据结构和socket链接,并将网络传输所对应的应用程序的UID添加到传输层sock数据结构的UID字段中;
步骤520,在传输数据时,查找所述数据对应的sock数据结构;
步骤530,在查找到对应的sock数据结构时,根据所述数据,获取传输数据的链接信息,作为第一链接信息;以第一链接信息为索引,通过第二哈希表记录对应的UID,作为第一链接信息和UID的对应关系;
步骤540,如果没有对应的sock数据结构,根据所述数据,获取传输数据的链接信息,作为第二链接信息;通过第三哈希表记录所述第二链接信息,根据所述第二链接信息,在所述对应关系中查找对应的UID;
步骤550,根据传输层sock数据结构中的UID,确定传输数据对应的应用程序;
步骤560,根据所述UID,统计对应的应用程序在第一预设时间内消耗的流量;
步骤570,如果应用程序在第一预设时间内消耗的流量大于预设阈值,则关闭终端的数据流量,并在关闭第二预设时间后再次打开所述数据流量。
本实施例的技术方案,通过在网络传输建立时,在创建的sock数据结构的UID字段中添加对应的应用程序的UID,在传输数据时,如果查找到对应的sock数据结构就可以将传输数据产生的流量消耗统计到该应用程序中,并记录第一链接信息和UID的对应关系,如果没有对应的sock数据结构,则根据第二链接信息在所述对应关系中查找对应的UID,从而将流量消耗统计到对应的应用程序中,可以将消耗的流量划分到对应的应用程序中,提高了针对流量来源进行流量消耗统计的准确性,统计第一预设时间内各个应用消耗的流量,如果一个应用程序消耗的流量大于预设阈值,则关闭数据流量,并在关闭第二预设时间后再次打开,为用户节省了流量,进而节省了流量费用,而且不会影响用户使用。
图6是本发明实施例提供的一种监控应用程序使用流量的装置的结构示意图,如图6所示,本实施例所述的监控应用程序使用流量的装置包括:UID添加模块610、UID获取模块620和应用程序确定模块630。
其中,UID添加模块,用于在网络传输建立时,创建传输层sock数据结构和socket链接,并将网络传输所对应的应用程序的UID添加到传输层sock数据结构的UID字段中;
UID获取模块,用于在传输数据时,查找所述数据对应的传输层sock数据结构并获取对应的UID;
应用程序确定模块,用于根据传输层sock数据结构中的UID,确定传输数据对应的应用程序。
可选的,所述UID获取模块包括:
sock结构查找单元,用于在传输数据时,查找所述数据对应的sock数据结构;
对应关系记录单元,用于在查找到对应的sock数据结构时,记录传输数据的链接信息及对应的UID,作为第一链接信息,并记录第一链接信息和UID的对应关系;
UID查找单元,用于如果没有对应的sock数据结构,则记录传输数据的链接信息,作为第二链接信息,根据所述第二链接信息,在所述对应关系中查找对应的UID。
可选的,所述sock结构查找单元包括:
链接状态查找子单元,用于在接收到数据时,在记录网络链接状态的第一哈希表中查找所述数据所属的socket链接的状态;
sock结构确定子单元,用于如果查找到所述数据所属的socket链接的状态,则查找对应的sock数据结构;如果没有查找到所述数据所属的socket链接的状态,则确定没有对应的sock数据结构。
可选的,所述对应关系记录单元包括:
第一链接信息获取子单元,用于根据所述数据,获取传输数据的链接信息,作为第一链接信息;
对应关系记录子单元,用于以第一链接信息为索引,通过第二哈希表记录对应的UID,作为第一链接信息和UID的对应关系;
所述UID查找单元包括:
第二链接信息获取子单元,用于根据所述数据,获取传输数据的链接信息,作为第二链接信息;
链接信息记录子单元,用于通过第三哈希表记录所述第二链接信息。
可选的,所述链接信息包括服务器的IP地址、端口和协议。
可选的,还包括:
流量消耗统计模块,用于根据所述UID,统计对应的应用程序在第一预设时间内消耗的流量;
数据功能处理模块,用于如果应用程序在第一预设时间内消耗的流量大于预设阈值,则关闭终端的数据流量,并在关闭第二预设时间后再次打开所述数据流量。
上述监控应用程序使用流量的装置可执行本发明任意实施例所提供的监控应用程序使用流量的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明任意实施例提供的监控应用程序使用流量的方法。
实施例五
本发明实施例还提供了一种终端,该终端可以包括本发明任意实施例提供的在背光调整中开启接近传感器的装置。图7为本发明实施例提供的一种终端的结构示意图,如图7所示,该终端可以包括:存储器701、中央处理器(Central Processing Unit,以下简称CPU)702及存储在存储器上并可在中央处理器上运行的计算机程序。该移动终端还可以包括外设接口703、RF(Radio Frequency,射频)电路705、音频电路706、扬声器711、电源管理芯片708、输入/输出(I/O)子系统709、触摸屏712、其他输入/控制设备710以及外部端口704,这些部件通过一个或多个通信总线或信号线707来通信。其中,中央处理器也可以简称为处理器。
应该理解的是,图示终端700仅仅是终端的一个范例,并且终端700可以具有比图中所示出的更多的或者更少的部件,可以组合两个或更多的部件,或者可以具有不同的部件配置。图中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
下面就本实施例提供的监控应用程序使用流量的终端进行详细的描述,该终端以手机为例。
存储器701,所述存储器701可以被CPU702、外设接口703等访问,所述存储器701可以包括高速随机存取存储器,还可以包括非易失性存储器,例如一个或多个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
外设接口703,所述外设接口703可以将设备的输入和输出外设连接到CPU702和存储器701。
I/O子系统709,所述I/O子系统709可以将设备上的输入输出外设,例如触摸屏702(相当于上述实施例中的屏幕)和其他输入/控制设备710,连接到外设接口703。I/O子系统709可以包括显示控制器7091和用于控制其他输入/控制设备710的一个或多个输入控制器7092。其中,一个或多个输入控制器7092从其他输入/控制设备710接收电信号或者向其他输入/控制设备710发送电信号,其他输入/控制设备710可以包括物理按钮(按压按钮、摇臂按钮等)、拨号盘、滑动开关、操纵杆、点击滚轮。值得说明的是,输入控制器7092可以与以下任一个连接:键盘、红外端口、USB接口以及诸如鼠标的指示设备。
触摸屏712,所述触摸屏712是用户终端与用户之间的输入接口和输出接口,将可视输出显示给用户,可视输出可以包括图形、文本、图标、视频等。
I/O子系统709中的显示控制器7091从触摸屏712接收电信号或者向触摸屏712发送电信号。触摸屏712检测触摸屏上的接触,显示控制器7091将检测到的接触转换为与显示在触摸屏712上的用户界面对象的交互,即实现人机交互,显示在触摸屏712上的用户界面对象可以是运行游戏的图标、联网到相应网络的图标等。值得说明的是,设备还可以包括光鼠,光鼠是不显示可视输出的触摸敏感表面,或者是由触摸屏形成的触摸敏感表面的延伸。
RF电路705,主要用于建立手机与无线网络(即网络侧)的通信,实现手机与无线网络的数据接收和发送。例如收发短信息、电子邮件等。具体地,RF电路705接收并发送RF信号,RF信号也称为电磁信号,RF电路705将电信号转换为电磁信号或将电磁信号转换为电信号,并且通过该电磁信号与通信网络以及其他设备进行通信。RF电路705可以包括用于执行这些功能的已知电路,其包括但不限于天线系统、RF收发机、一个或多个放大器、调谐器、一个或多个振荡器、数字信号处理器、CODEC(COder-DECoder,编译码器)芯片组、用户标识模块(Subscriber Identity Module,SIM)等等。
音频电路706,主要用于从外设接口703接收音频数据,将该音频数据转换为电信号,并且将该电信号发送给扬声器711。
扬声器711,用于将手机通过RF电路705从无线网络接收的语音信号,还原为声音并向用户播放该声音。
电源管理芯片708,用于为CPU702、I/O子系统及外设接口所连接的硬件进行供电及电源管理。
本发明实施例提供的CPU702执行所述计算机程序时实现以下步骤:
在网络传输建立时,创建传输层sock数据结构和socket链接,并将网络传输所对应的应用程序的UID添加到传输层sock数据结构的UID字段中;
在传输数据时,查找所述数据对应的传输层sock数据结构并获取对应的UID;
根据传输层sock数据结构中的UID,确定传输数据对应的应用程序。
上述终端通过在网络传输建立时,创建传输层sock数据结构和socket链接,并将网络传输所对应的应用程序的UID添加到传输层sock数据结构的UID字段中,在传输数据时,查找所述数据对应的传输层sock数据结构并获取对应的UID,根据传输层sock数据结构中的UID,确定传输数据对应的应用程序,从而解决了在socket数据结构或者对应的文件被销毁时将消耗的流量划分到Android系统的问题,可以将消耗的流量划分到对应的应用程序中,提高了针对流量来源进行流量消耗统计的准确性。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。