USB重定向三篇

2024-07-05

USB重定向 篇1

虚拟桌面是一种基于服务器的计算模型,它通过虚拟化技术将服务器上的资源以桌面系统的形式映射到移动设备、个人计算机、瘦客户机等终端设备。虚拟桌面运行于云计算数据中心,将终端设备与桌面环境解耦合[1]。用户可通过终端设备登录虚拟桌面,访问服务器资源。

虚拟桌面通过网络实现终端设备间的协同办公,具有易管控、低成本、高安全性等优点[2],已被广泛应用于大型企业的远程办公系统。然而,现有的虚拟桌面仅支持鼠标、键盘等USB设备,无法满足用户对USB存储设备、USB多媒体设备的操控需求。为解决这一问题,在Android平台上实现了USB设备重映像系统,使用户能够在虚拟桌面上对接入终端的USB设备进行读写操作,实现了U盘、硬盘、USB摄像头、智能卡读卡器等USB设备的桌面虚拟化。

1 关键技术

1.1 桌面虚拟化技术

桌面虚拟化技术基于服务器虚拟化技术,它对计算机资源进行整合和抽象,向终端用户及应用程序隐去计算资源的物理特性和硬件实现细节,实现了桌面系统的远程动态访问与数据中心的统一托管。桌面虚拟化技术的架构分为四层:资源池层、桌面管理层、网络接入层和终端接入层,分别负责计算资源的部署、桌面系统的调度、网络的连接以及终端设备的接入。

1.2 USB设备重映像技术

USB设备重映像技术是指运行在终端上的虚拟桌面可识别并操控与该终端连接的USB设备。系统将USB设备描述符信息通过TCP/IP协议发送至服务器虚拟机端,从而将USB设备的使用权交由虚拟桌面。同时将终端设置为USB代理,负责处理用户在虚拟桌面上对USB设备的操控请求。Android平台虚拟桌面上的USB设备重映像技术涉及Android NDK开发、虚拟桌面专用协议PCo IP、JNI接口设计以及Unix进程间的通信。

2 系统设计

2.1 开发环境及功能概述

系统采用Android Studio为开发平台,以Java语言为Android应用层开发语言,以C++语言为Android Native层开发语言,利用NDK构建Android Native层核心功能模块,以Junit为系统测试框架[3]

系统运行过程中可实时获取连接Android终端的USB设备信息,并更新用户操作界面,显示已连接的USB设备,为用户提供操作菜单。系统响应USB设备重映像操作后可将USB设备信息通过消息传递框架通知服务器,将连接Android终端的USB设备的使用权交由虚拟桌面。

2.2 架构设计

虚拟桌面USB设备重映像系统由用户操作界面、设备监听模块、消息控制模块、虚拟桌面和服务器五部分组成,如图1所示。

图1 系统整体架构

系统分为应用层、JNI接口层和Native层(本地层)。其中应用层运行虚拟桌面,提供与用户交互的界面。接口层提供JNI接口,负责应用层Java程序和Native层C++动态链接库的互相调用。监听模块和控制模块位于Native层,监听模块接收并处理应用层USB设备状态广播,获取USB设备信息,响应用户的USB操作请求;控制模块调用USB函数库,接收监听模块传递的USB描述符信息,负责系统运行中线程之间的消息传递。消息传递框架基于TCP/IP协议[4],负责控制模块与服务器的数据及请求传递。服务器为虚拟桌面提供运行环境,与应用层通过PCo IP协议进行通信[5]

2.3 功能设计

(1)交互设计

系统为用户呈现接入终端的USB设备,实时响应用户操作,系统与用户的交互如图2所示。

图2 系统与用户交互

四个交互对象分别是用户、UI线程、监听进程和虚拟桌面。UI线程负责响应用户的请求事件,监听进程获取USB设备信息并反馈给UI线程,UI线程更新设备缓存并将USB设备以图标形式呈现给用户。响应用户对USB设备的重映像请求后,UI线程向服务器发起连接请求,经过握手操作,服务器会识别该USB设备,用户可在虚拟桌面上操控USB设备。系统工作流程如图3所示。

(2)监听功能

为保障系统准确获取USB设备状态,监听模块应包含监听USB设备状态、获取USB设备信息、过滤与系统不兼容的设备、提供应用层接口、与UI线程通信等功能。具体而言,监听模块监听USB设备状态,获取能与系统兼容的USB设备的描述符。USB设备描述符记录了设备序列号、设备适用的协议类型、设备商和产品编号等信息。监听模块以动态链接库的形式存在于Android Native层,提供与Android应用层交互的接口。监听模块可通过进程间通信的方式,将获取的USB设备信息传递给UI线程,更新设备列表。监听模块功能如图4所示。

图4 监听模块功能

监听模块的工作流程如图5所示。

(3)控制模块设计

系统控制模块完成USB设备信息接收、更新设备缓存触发UI重绘、线程间消息处理、与应用层交互、处理连接请求等操作。具体而言,控制模块接收监听模块传递的USB设备信息,更新设备缓存,保持与Android终端接入的USB设备同步,通过回调函数结合Android消息处理机制更新UI。控制模块与安卓应用层的交互包括模块的加载和停用、与应用层消息格式匹配等操作。同时,控制模块负责处理与服务器的连接请求[6]。控制模块功能如图6所示。

图6 控制模块功能

控制模块工作流程如图7所示。

图7 控制模块工作流程

(4)JNI接口设计

系统应用层Java程序和Native层C++程序无法直接互相调用,JNI接口用于实现Android应用程序和Native动态链接库的函数调用。系统主要JNI接口包括:加载USB设备监听模块和控制模块、监听模块处理USB设备状态广播、监听模块响应USB设备操作的请求等。

(5)通信设计

系统模块之间的通信包括:

应用层和监听模块的通信,通过JNI接口实现,主要包括监听模块的启动与信息的交互、USB设备的操作。

应用层和控制模块的通信,包括更新UI、连接虚拟机。

监听模块和控制模块的通信,利用Socket本地套接字,绑定Android系统内部存储作为监听模块和控制模块通信的管道。

虚拟桌面与服务器之间的图像、声音传递,利用PCo IP协议(基于UDP协议)实现。

控制模块与服务器传递URB及USB数据包,利用基于TCP/IP协议的消息传递框架实现。

3 关键功能实现

3.1 监听模块功能实现

监听模块在Android后台运行,交互界面设置监听模块启动框,当框内状态改变时,系统进行判断,若为选中状态,则调用创建监听进程的函数。若取消选择,则调用终止监听服务的函数。Android 3.1版本开始支持USB HOST模式,可以实现利用Android广播机制获取USB设备状态信息[7]。系统创建广播接收对象,响应USB设备状态广播消息,具体过程如图8所示。

图8 处理USB状态广播消息

监听模块注册广播接收器,接收来自系统关于USB设备状态的广播,设置事件过滤。

监听模块响应事件广播,重写响应函数:查询SQLite数据库,若USB设备型号存在于数据库中,表明该设备与重映像系统兼容,监听模块会获取并传递该USB设备信息,其伪码如下:

3.2 控制模块功能实现

控制模块的关键功能为处理多线程和异步消息。在Native线程中控制模块通过Socket套接字获取来自监听模块的消息后,会回调应用层Java函数,发送增加设备的消息通知UI线程,更新UI。

控制模块利用Handler类实现消息的获取和发送,Handler将相应的方法放入其所在线程中执行。系统创建新线程时生成一个消息队列(Message Queue),作为装载线程间消息的容器,同时生成一个循环Looper,用于管理消息队列。Looper负责阻塞读取队列中的消息,将消息逐个发送至对应的Handler完成响应[8]。消息处理过程如图9所示。

图9 控制模块消息处理

系统的消息存放于全局消息池Message Pool中,消息池中的首个消息直接通过new()方法生成,其他消息通过Recycle()回收函数回收至消息池中[9]

3.3 JNI接口

JNI使得在Java虚拟机(JVM)内部运行的Java代码能够与用其他编程语言(C、C++和汇编语言)实现的库和应用程序进行交互[10]。系统通过JNI函数实现Android应用层和Android Native层的函数调用。

应用层的Java程序调用Native层程序时,JVM会向Native层传递两个指针,分别为JNIEnv类型和jobject类型,形式如下:

JNIEnv类型的指针包含JVM的接口,通过该指针可以对Java程序进行操作,如创建Java类对象、获取对象属性、调用对象的方法等。jobject obj参数为声明Native层函数的Java对象的引用。

Native层程序调用应用层Java程序时,首先获取Java类和类对象的属性和方法。JNI定义jfield ID、jmethod ID类分别表示应用层Java类对象的属性和方法。JNI函数通过ID识别不同的域和方法[11]。表1列出Native层程序调用应用层程序的关键方法。

表1 Native层程序调用应用层程序的关键方法

监听模块检测到USB设备接入时,会发送增加设备的消息,控制模块响应该消息,在UI线程中回调相应的增加设备函数,UI线程将需要回调的函数ID都放入同一个结构体中统一命名,并在初始化函数设置相应的环境变量[12]

3.4 进程间通信

监听模块和控制模块运行于不同进程中,系统利用Socket实现USB设备信息在不同进程间的传递。

Socket可用于网络中计算机之间的通信,也可以用于本地不同进程之间的通信。Socket提供了多种套接字类型,系统采用AF_UNIX本地套接字来实现监听模块和控制模块之间的通信[13]。具体实现过程如图10所示。

图1 0 监听模块和控制模块通信

系统的监听模块作为通信Server端,首先调用Socket()函数创建AF_UNIX类型的套接字,并在Android系统内部存储中创建文件。通过调用Bind()函数绑定该文件的绝对路径:/data/data/filename,绑定成功后监听模块可对Client端的连接请求进行阻塞监听。

控制模块作为通信Client端,首先创建本地套接字,向Server端监听模块发起连接请求。监听模块通过与控制模块进行握手响应连接请求,连接成功后监听模块和控制模块可进行通信,直至其中一方调用Close()操作[14]

4 系统测试

4.1 功能测试

测试采用Nexus 5手机运行虚拟桌面Horizon View 5.0[15],Android系统版本为4.4,USB设备为HP USB2.0存储设备,容量为16 GB。测试地点网络信号良好,无明显干扰。

登录虚拟桌面后启动USB设备重映像主界面(USB Redirection),界面Arbitrator Devices一栏显示接入Android终端的USB设备,如图11所示。

图1 1 系统运行结果

用户可选择USB设备进行重映像,虚拟桌面识别到设备后用户即可对该USB设备进行读写操作,如图12所示。

图1 2 虚拟桌面识别重映像的USB设备

4.2 传输速率测试

分别在Android平台上的虚拟桌面、Android手机和个人计算机上传输相同的文件(虚拟桌面和PC均运行Windows 7 64位操作系统,Android系统为4.4),测试10次后取传输速率(单位MB/s)的平均值,如图13所示。

图1 3 传输速率比较

测试结果显示,在Android虚拟桌面上对重映像的USB设备进行读写操作,其读写速率达到手机读写USB设备速率的97%,PC读写USB设备速率的95%。

5 结语

本文针对现有虚拟桌面无法对USB设备进行桌面虚拟化的问题,在Android平台上设计了虚拟桌面USB设备重映像系统,实现了用户在Android虚拟桌面上对USB设备的操控。本文分析了USB设备重映像系统的功能,对系统进行架构设计和模块划分。重点分析了USB设备的状态监听和描述符信息的获取、传输。经过测试分析,用户通过该系统在Android虚拟桌面上对重映像的USB设备进行读写操作,其速率达到手机和PC读写速率的95%以上,与本地USB传输速率相当。实验显示,USB设备重映像系统运行稳定,可以应用于大型企业的虚拟化办公系统,为用户远程操控USB设备带来方便。

目前USB设备重映像功能是作为独立的轻量级Android应用而存在,用户需手动加载功能模块。如何将USB设备重映像功能融合到虚拟桌面应用中,从而使系统可以自动加载设备监听、控制模块,是本文未来的改进方向。

摘要:虚拟桌面是基于服务器的计算模型,可提高计算机的资源管理效率。现有的虚拟桌面对USB设备支持不足,无法实现USB设备的桌面虚拟化。针对这一问题,在基于Android的虚拟桌面上设计USB设备重映像系统,实现通过虚拟桌面对USB设备的操控。该系统通过NDK构建USB设备监听模块和控制模块,利用Socket在进程间传递USB设备信息,利用基于TCP/IP协议的消息框架与服务器进行数据传输。实验结果表明,在Android虚拟桌面上对重映像的USB设备进行读写操作,其传输速率与本地USB的传输速率相当。

USB重定向 篇2

由夏转秋,想添置一件风衣,在淘宝浏览一圈,再打开新浪微博就可以看到页面推送的各种风衣广告——这就是重定向广告。据统计,97%的用户在访问网站后没有购买就离开,这对电商来说就是失去的潜在消费者,而重定向广告就是要找回这些用户。运用互联网技术,针对网站访问者显示其之前浏览过的商品或服务广告,通过两次、三次甚至N次曝光和不断提醒,最终完成交易。随着电商竞争日趋激烈,用户获取成本不断攀升,重定向广告以其精准性、易用性,越来越受到零售电商重视。

今年5月,来自法国的在线效果类展示广告巨头Criteo宣布启动中国市场业务,重定向广告正是Criteo的核心业务。重定向广告的核心是精准把握用户的需求,通过强大的技术力量实现广告的精准投放。那么,Criteo的驱动力和核心竞争优势是什么?它如何通过自己的技术优势帮助广告主提升ROI?

作为这一领域的领导企业,Criteo进入中国无疑将给国内在线效果类广告行业带来新的变化。日前,在北京中关村Criteo中国总部,《新营销》记者采访了Criteo公司CEO、联合创始人Jean-Baptiste Rudelle。

Q:新营销

A:Jean-Baptiste Rudelle

Q:Criteo的业务有什么独特之处?

A:Criteo成立于2005年,是一家做在线效果类数字营销的公司,已在纳斯达克上市。我们主要服务电子商务类企业,这里是指广义的电子商务,不光指在线零售,也包括在线旅游等所有在线交易的企业。展示广告市场非常大,全球大概有300-400亿美元的规模,但我们发现效率不高,更多还是以品牌广告为主的展示。而Criteo做的效果类展示广告可以做到跟搜索广告差不多甚至更好的效果,对电子商务企业来说,我们做的展示广告实际上是一个销售渠道,能将广告与销售收入直接挂钩。

Criteo是仅次于谷歌的全球排名第二的展示广告生态系统,去年一年,通过点击Criteo的展示广告达成购买给客户带来的销售收入达到97亿美元,其中10亿美元来自于移动广告,移动端是我们未来布局的重要方向。

Q:Criteo与竞争对手相比,能给广告主提供哪些独特的价值?

A:Criteo与竞争对手相比,有一个非常大的不同之处,他们通常是按照展现量(CPM)收费,而我们采用CPC模式,按照点击量收费。我们是按照CPM从媒体购买库存,然后按CPC销售给广告主,这就意味着只有当用户点击了某个展示后,我们才能向广告主收取费用,我们承担了比较大的风险,这就要求我们有非常好的技术,能够精准预测用户行为。CPC模式的最大优势是能够非常简单、直观地帮助广告主衡量他们的ROI,这在CPM模式下是无从衡量的。

重定向广告是Criteo的核心业务,我们不但可以实现广告重定向,而且可以实现大规模一对一个性化广告展示,这也是Criteo领先竞争对手的“独门秘技”。通常,重定向广告可以为广告主增加约2.5倍点击率,而Criteo重定向展示广告可以增加7-8倍点击率。原因在于Criteo对用户浏览行为进行收集和分析,根据用户兴趣和购买意向快速生成动态广告组合来展示,这就是大规模一对一个性化广告展示的意义所在,即针对每一个互联网用户,其所见的Criteo重定向广告都是为其唯一定制的,因此效果是显而易见的。

Q:Criteo为什么要选择CPC商业模式?对于这种收费模式广告主是否更容易接受?

A:CPC在展示广告市场是一个相对新的模式,大多数广告代理公司很难提供CPC模式,因为这要求广告代理公司要有很强大的技术能力才能保证自己有收入,风险太大。但Criteo可以做到,我们有非常强大的自主学习式引擎和预测引擎,通过它们对市场洞察提供可评估的结果,因此能够在正确的时间将对的产品广告推荐给对的用户。而且,随着每一条广告的交付,Criteo的引擎在预测和推荐时的精确性也在不断提高,这就是我们的核心技术竞争力。Criteo是一家技术驱动型公司,1000多名员工中有40%是技术人员,不断进行研发和创新。

Criteo不向客户销售技术,因为客户对于采用什么样的技术并不关心,他们不需要了解。对于客户来说,最关键的就是ROI是不是能够让他们满意。我们的客户通常在尝试了CPC模式后,就会发现这种模式不仅可以让他清楚地看到一笔投入的回报,甚至ROI比他们投放的搜索类广告还要高。所以一旦客户使用过CPC模式,就不会再使用CPM模式,因为前者的优势很明显。近3年我们每年的客户保有率都接近90%。从CPM转向CPC模式,我们认为这是一种突破性的转变,我们希望CPC模式能够改变在线效果类展示广告市场。

此外,近两年中国的广告程序化购买兴起很快,其实这对我们的商业模式也非常适合,因为程序化购买通常是按CPM购买媒体资源。所以我们认为在这个时候进入中国市场是一个很好的时机。

Q:Criteo是如何帮助广告主实现高转化率和提高ROI的?

A:当初我们在美国和一个大型在线零售商接触,最初是不断地介绍我们有什么样的技术,最后他们说:那好,我们可以跟你们做一个测试,现在我们所有在线渠道最好的效果是1:8的投资回报,如果在一段时间内你们能够让我们实现1:8的投资回报,我们就和你们合作。Criteo接受了挑战。一个月后,我们带给他们的是1:28的投资回报率,这个数字让他们非常吃惊。

我们是如何做到的?首先,我们要掌握大量的访问数据,从一开始合作我们就要在数据方面与客户进行深度集成,了解用户的历史数据,比如有多少用户只是看看就走了,有多少用户曾把看到的商品加入购物车,有多少用户购买了。

在掌握了大量的数据后,我们对这些数据进行分析和处理,以此来准确地了解和预测用户的购物意向。用户的购物意向是非常微妙且复杂的事情,比如一个用户浏览一双黑色的鞋子,那么他有可能在买了这双鞋子后,再买一条蓝色的牛仔裤进行搭配。我们要通过分析预测用户购物的意向,有的放矢地向这个用户展示他可能感兴趣的商品。这个分析预测的过程非常关键,必须找出用户行为的一些共性和模式,才能在正确的时间、把正确的商品展示给正确的用户。而且,别忘了我们是按照点击收费的,我们要计算和衡量这个展示的价值,给出每次点击的合理价格,把这二者结合之后,就可以帮助广告主达到一个非常理想的投资回报率。

这家美国零售商成为Criteo的客户已经有近5年的时间了,每一天他们都有很多用户是通过我们的展示广告购买商品的,我认为这是一个非常好的例证。

Q:移动互联网发展迅速,也越来越受到广告主重视,Criteo在移动端为广告主提供哪些服务和解决方案?

A:Criteo在移动端的业务发展速度非常快。在全球范围内,我可以说出一组数据说明它的增长速度。去年9月,我们在移动端的收入占整体收入的2%;这个数字到12月增长到了10%;到今年3月,达到15%。在日本,这个数字更高,达到25%左右。

Criteo为广告主提供多屏的一体化解决方案。虽然现在大家还在区分移动端和PC端,但是各种设备之间的区别越来越小。我认为,未来广告主更关注的是我们作为一个解决方案提供商,能不能把我们的在线效果类展示广告解决方案通过多种屏幕无缝地提供给他们的用户,不论用户使用的是哪种屏幕的设备、通过哪种渠道看到我们的广告。

去年我们收购了AD-X Tracking公司,AD-X Tracking是一个在移动应用APP端进行移动广告投放、移动营销的追踪效果分析工具。今年1月,我们率先推出移动应用一对一个性化动态展示广告解决方案,可以同时支持Android和IOS系统。简单点说,假如用户下载了某电商的APP,看过以后没有购买就退出了,但当他打开其他APP,我们会给他推送该电商的广告,他看到的广告是为他量身定制的,而且当他点击广告时不会再跳转到电商APP的下载页面,而是直接进入商品页面。我们更关注已经下载了APP的用户,提高用户活跃度,以及促进用户在移动端购买的转化率,这在业界是非常领先的。Criteo可以提供跨PC端和移动端(包括移动网页和移动应用)的一对一个性化重定向广告,目前拥有这一技术的公司屈指可数。

Q:比起其他国家,中国市场有何特点?

A:目前中国是全球第二大在线零售市场,有望在2016年超过美国。进入中国市场,我们非常乐观,一方面我认为Criteo在中国有很多机会,希望可以帮助本土电子商务企业。另一方面,中国很多出口业务是通过在线形式向全球销售的,Criteo在国际市场有比较大的优势,可以帮助中国出口企业提升海外市场收入。

USB重定向 篇3

域名变更,为了使搜索引擎权重自然转换,301重定向是无疑是必然之选,但很多人都发现,一般在IIS中设置重新定向到URL功能只有首页能生效,内页的301都是跳转到首页来的,这样就不好了,怎么办?

经查资料发现,原来301转向还需要加参数。

以下为引用的内容:

$S 将请求的 URL 的后缀传递给新的 URL。后缀是用重定向的 URL 代替之后,初始 URL 中所保留的部分。

如果未设置 EXACT_DESTINATION 标志,则结果目标 URL 的名称将具有所请求文件的名称(作为文件夹名称)以及文件名本身。

$Q 将初始 URL 中的参数(如 querystring 参数)传递至新的 URL,包括问号 (?),

具体的操作为。

打开IIS.新建网站。绑定要做转向的米。如我的www.39magic.com,然后右键,属性,主目录。

以下为引用的内容:

选择 重新定向到URL(U)

重新定向到(C) 这里输入我的新域名 www.39magic.cn$S$Q (注意,我后边加上了参数$S$Q)

客户端重新定向到: 选择 上边输入的准确 URL(X) 和资源的永久重新定向(H)

然后确定就行了。

测试一下。在地址栏里输入www.39magic.com 自动跳转到 www.39magic.cn

在试下内页的跳转。收入www.39magic.com/website.asp 自动跳转到www.39magic.cn/website.asp

上一篇:油井防砂下一篇:压疮的预防