説明

デバイス共有システム、デバイス共有クライアント、及びデバイス共有方法

【課題】プリンタやストレージなどのデバイス(周辺機器)をネットワーク上のクライアントPCで共用する場合、サーバ側の処理負荷を低減し、ユーザに手動操作を強いることなく、必要なときだけデバイスにアクセスするように制御する手段を提供する。
【解決手段】クライアントPCは、ネットワークを介して取得したデバイスの接続情報をもとに接続シミュレート手段によって当該デバイスが直接接続されているようにシミュレートし、アプリケーション層からの入出力指示があると、デバイスに対する制御コマンドを生成し、制御コマンドの入出力ポートがオープンされると、接続シミュレート手段に対しサーバとのセッション開始を指示し、セッション接続が開始されるとサーバを介してデバイスとの間でデータの入出力を行い、当該入出力ポートがクローズされると、接続シミュレート手段に対してサーバとのセッション終了を指示し、セッションを終了させる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ネットワークを介してデバイスを共有する機能を備えたシステム、クライアント、及びその制御方法に関するものである。
【背景技術】
【0002】
ネットワークの普及により、従来、パーソナルコンピュータ(PC)などにローカル接続して利用していたデバイス(周辺機器)をネットワーク上のクライアントPCから利用できるように工夫したデバイスサーバが発表されている。
【0003】
例えば、プリンタ、ストレージ、スキャナなどのデバイスを、ネットワーク上のクライアントPCからデバイスサーバを介して共有デバイスとして利用可能とするための実現方法がいくつか提案されている。
【0004】
ひとつの実現方法として、クライアントPCのオペレーティングシステム(Operating System;以下、OS)に対して、ローカル接続されているデバイスとして仮想的に認識させる方法がある。
【0005】
この方法では、クライアントPCに専用のアプリケーションソフトウェア(以下、ユーティリティ)を導入しておき、ユーザがデバイスにアクセスしようとするときにユーティリティを操作し、クライアントPCに対してローカル接続したデバイスとして仮想的に認識させることで、ネットワーク上のクライアントPCから、ローカル接続した状態と同様にアクセスできるようにしている。
【0006】
図16は、クライアントPCに導入したユーティリティをユーザが操作し、デバイスを使用する場合の基本的な動作を示すフローチャートである。ここでは、デバイスとしてプリンタを使用するものとして説明する。
【0007】
ユーザは、まず、プリンタを使用するためにクライアントPCのユーティリティを起動する。そして、ユーザがクライアントPCのユーティリティを操作すると、デバイスサーバとの間でUDP(User
Datagram Protocol)などを用いてデータ通信し、デバイスサーバを介して接続されているプリンタの状態を確認する(ステップS1601)。
【0008】
デバイスサーバは、自らに接続されたプリンタの状態に関する情報を、デバイスサーバが他のクライアントPCとの間でセッション接続中か否かの情報とともに応答情報としてクライアントPCへ返す。
【0009】
クライアントPCでは、ユーティリティがこの応答情報に基づきデバイスサーバがセッション接続中か否かを判断する(ステップS1602)。
【0010】
デバイスサーバがセッション接続中の場合、若しくはデバイスサーバから正常に応答がない場合(ステップS1602でNo)、セッション接続ができないため、ユーティリティを介してユーザにその旨を通知することで、本フローによる処理は終了となる。
【0011】
デバイスサーバ及びプリンタが正常であり、他のクライアントPCとの間でセッション接続中でない場合(ステップS1602でYes)、ユーザがクライアントPCのユーティリティにより接続操作を行うと、ユーティリティから接続開始命令が発行され(ステップS1603)、デバイスサーバを介して接続されているプリンタの情報(以下、デバイス情報)を取得し、このデバイス情報に基づいて当該プリンタの使用に必要となるソフトウェア(以下、デバイスドライバ)をロードする(ステップS1604)。
【0012】
クライアントPCのユーティリティは、デバイスドライバのロードが完了すると、デバイスドライバを介し、デバイスサーバに対してセッション開始要求を送る(ステップS1605)。
【0013】
デバイスサーバとの間でセッション接続が開始されると(ステップS1606でYes)、プリンタへのアクセスが可能となり、クライアントPCはデバイスサーバを介してプリンタとの間でデータやコマンドの送受信を行い、プリンタにおいて印刷処理が実行される(ステップS1607)。なお、セッション接続が開始できない場合(ステップS1606でNo)、本フローによる処理は終了となる。
【0014】
印刷処理が完了してプリンタのアクセスを終了するときは、ユーザがクライアントPCのユーティリティを操作してプリンタの終了操作を実行する(ステップS1608)。
【0015】
プリンタの終了操作が実行されると、クライアントPCのユーティリティはデバイスドライバを介し、デバイスサーバに対してセッション終了要求を送る(ステップS1609)。
【0016】
クライアントPCのユーティリティは、デバイスサーバからセッション終了の「OK」応答を受信するとセッション接続を終了し(ステップS1610)、プリンタのデバイスドライバをアンロードする(ステップS1611)。
【0017】
図17は、図16のフローチャートに基づいて動作する複数台のクライアントPC(PC1,PC2)がプリンタにアクセスするときの過程を示したタイミングチャートである。
【0018】
まず、PC1のユーザは、PC1のユーティリティを操作することにより、デバイスサーバを介してプリンタの状態を確認し、デバイスサーバが他のクライアントPC(ここではPC2)との間でセッション接続中か否かを確認する。
【0019】
デバイスサーバ及びプリンタが正常であり、他のクライアントPCとの間でセッション接続中でない場合に、PC1のユーザがユーティリティによりプリンタの接続操作を行うと、PC1から接続開始命が発行され、デバイスサーバを介してプリンタのデバイス情報を取得し、当該プリンタの使用に必要となるデバイスドライバをロードする。
【0020】
PC1は、デバイスドライバのロードが完了すると、このデバイスドライバを介してデバイスサーバに対してセッション開始要求を送り、デバイスサーバとの間でセッション接続が開始されるとプリンタへのアクセスが可能となる。
【0021】
そして、PC1はデバイスサーバを介してプリンタとの間でデータやコマンドの送受信を行い、プリンタにおいて印刷処理などが実行される。
【0022】
PC1とデバイスサーバがセッション接続中は、PC1によってデバイスサーバとのセッションが専有されているため、別のPC2からプリンタにアクセスすることができない。
【0023】
PC1によるプリンタへのアクセスが終了し、PC1のユーザがユーティリティによりプリンタの終了操作を実行すると、PC1のデバイスドライバから、デバイスサーバへセッション終了要求が送られる。そして、PC1は、デバイスサーバからセッション終了の「OK」応答を受信すると、プリンタのデバイスドライバをアンロードし、デバイスサーバとの間のセッション接続を終了する。
【0024】
ここで、PC2のユーザがユーティリティによりプリンタの接続操作を行うと、他のクライアントPCによってデバイスサーバとのセッション接続が専有されていないので、PC2からプリンタへのアクセスが開始される。
【0025】
このように、ユーティリティを使ってセッション接続の開始・終了を行うことによって、複数のクライアントPCからプリンタを共有することができる。
【0026】
しかし、この方法では、ユーザによるセッション接続の開始・終了操作が必要であり、ユーザがユーティリティを使ってプリンタの終了操作をしない限り、デバイスサーバとのセッションが専有されてしまうため、他のクライアントPCがプリンタを使用することができないという問題が生じる。
【0027】
かかる問題を解決するために、ブロックヘッダで特定されるデータ長のブロックデータが伝送される間だけ、特定のクライアントPCによるデータ伝送専有状態として、当該クライアントPCとプリンタとの間のデータ伝送を許可するデバイスサーバを用いたネットワークファイル管理システムが開示されている(特許文献1参照)。
【0028】
【特許文献1】特開2007−317067号公報
【発明の開示】
【発明が解決しようとする課題】
【0029】
しかし、特許文献1に開示されたネットワークファイル管理システムでは、複数のクライアントPCから手動操作を行うことなく、ストレージを共有することはできるものの、多数のアクセス要求を処理し、特定のクライアントPCに対するデータ伝送専有状態の設定・解除を制御するために、デバイスサーバには高い処理性能が要求されるので、デバイスサーバの高価格化は避けられない。
【0030】
上記問題に鑑みて、本発明は、ストレージやプリンタなどのデバイス(周辺機器)をネットワーク上のクライアントPCで共用する場合、サーバ側の処理負荷を低減するとともに、ユーザに手動操作を強いることなく、必要なときだけデバイスにアクセスするように制御する手段を提供することを目的とする。
【課題を解決するための手段】
【0031】
上記目的を達するために、請求項1に記載のクライアントは、ネットワークを介してサーバに接続されたデバイスとの間でデータの入出力を行うクライアントであって、前記デバイスへの入出力を指示するアプリケーション層と、前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得手段と、前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレート手段と、
前記接続シミュレート手段により接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成手段と、前記アプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成手段と、当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信手段と、前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御手段と、前記入出力ポート制御手段が前記入出力ポートをオープンしたとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示するセッション開始手段と、前記入出力ポート制御手段が前記入出力ポートをクローズしたとき、前記接続シミュレート手段に対して前記サーバとのセッション終了を指示するセッション終了手段とを備えることを特徴とする。
【0032】
また、上記目的を達するために、請求項7に記載のデバイス共有システムは、デバイスと、サーバと、ネットワークを介して前記サーバに接続された前記デバイスとの間でデータの入出力を行うクライアントから構成されるデバイス共有システムにおいて、前記クライアントは、前記デバイスへの入出力を指示するアプリケーション層と、前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得手段と、前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレート手段と、前記接続シミュレート手段により接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成手段と、前記アプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成手段と、当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信手段と、前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御手段と、前記入出力ポート制御手段が前記入出力ポートをオープンしたとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示するセッション開始手段と、
前記入出力ポート制御手段が前記入出力ポートをクローズしたとき、前記接続シミュレート手段に対して前記サーバとのセッション終了を指示するセッション終了手段と、から構成されることを特徴とする。
【0033】
また、上記目的を達するために、請求項13に記載のデバイス共有方法は、ネットワークを介してサーバに接続されたデバイスをクライアントによって共有するデバイス共有方法であって、前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得ステップと、前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレートステップと、前記接続シミュレートステップにおいて接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成ステップと、前記デバイスへの入出力を指示するアプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成ステップと、当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信ステップと、前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御ステップと、前記入出力ポート制御ステップにおいて前記入出力ポートがオープンされたとき、前記接続シミュレートステップにおいて前記サーバとのセッション開始を指示させるセッション開始ステップと、前記入出力ポート制御ステップにおいて前記入出力ポートがクローズされたとき、前記接続シミュレートステップにおいて前記サーバとのセッション終了を指示させるセッション終了ステップと、を実行することを特徴とする。
【発明の効果】
【0034】
本発明によれば、クライアントPCのユーティリティなどでユーザが手動操作して行っていたセッション接続の開始・終了の操作が不要となり、ユーザはデバイスがネットワーク共有されていることを意識せずに使用することが可能となる。
【0035】
また、ネットワーク上でデバイスを共有する際、特許文献1に開示されているような高い処理機能をデバイスサーバへ組み込む必要がなくなるため、デバイスサーバの負荷が軽減され、安価なネットワークシステム構成で複数のクライアントPCからデバイスを共有することが可能となる。
【0036】
さらに、本発明によれば、クライアントPCは、デバイスドライバをロードするときのタイミングとデバイスにアクセスするときのセッション接続のタイミングを切り離して実行するので、必要なときだけデバイスサーバとの間でセッション接続が行われることになり、
一台のクライアントPCによるセッション接続の専有時間が短縮され、複数台のクライアントPCによってネットワーク共有されているデバイスを効率的に使用することができる。
【発明を実施するための最良の形態】
【0037】
以下、本発明の第1の実施の形態について図面を参照して詳細に説明する。
【0038】
図1は、本発明を実現するためのネットワークシステムの概略構成であり、PC100A,PC100Bと、デバイスサーバ200と、プリンタ300(デバイス)などから構成されている。
【0039】
このネットワークシステムでは、デバイスサーバ200とプリンタ300をUSB(Universal
Serial Bus)やIEEE1394などのインターフェースに準拠した接続ケーブル400でローカル接続する。また、デバイスサーバ200とPC100(PC100A,PC100B)は、有線又は無線のネットワーク500で接続する。
【0040】
また、図1のネットワークシステムでは、デバイスサーバ200、プリンタ300をそれぞれ別体の装置で構成しているが、この構成に限定されるものではなく、同等の機能を実現できる構成であれば種々の構成を採り得ることは勿論である。例えば、デバイスサーバ200をプリンタ300のケーシング内に収まるように一体構造としても良い。
【0041】
なお、以降の説明においては、クライアントPCのOSをWindows(登録商標)、デバイスをプリンタ、デバイスサーバとデバイスの接続インターフェースをUSBとした場合の構成で説明するが、これらに限定されず、別のOSや接続インターフェースを使用しても良い。
【0042】
次に、図1のネットワークシステムを構成する各装置について順次説明してゆく。
【0043】
まず、クライアントであるPC100について説明する。PC100(PC100A,PC100B)は、例えば、パーソナルコンピュータのような装置であり、ネットワーク500と接続し、デバイスサーバ200を介してプリンタ300を利用することが可能な構成となっている。
【0044】
図2は、PC100(PC100A,PC100B)のハードウェア構成及びソフトウェア構成の一例を示すブロック図である。
【0045】
PC100は、CPU101、入力部102、表示部103、メモリ104、通信部105、外部記憶部106などから構成されており、これらが内部バス107で接続されている。
【0046】
外部記憶部106は、OS110、アプリケーションプログラム111、本発明を実現するためのソフトウェア群112〜118(後述)など各種ソフトウェアが記録されている。ここで、アプリケーションプログラム111とは、プリンタ300に対して印刷処理を実行させることができるソフトウェアプログラムを指す。
【0047】
外部記憶部106に記憶されたこれらソフトウェアは、CPU101の制御に従い、メモリ104上に読み出されて実行される。
【0048】
通信部105は、ネットワーク500(有線又は無線ネットワーク)に接続するためのインターフェースであり、デバイスサーバ200との間でデータ通信を行うことで、PC100からデバイスサーバ200を介したプリンタ300へのアクセスを可能とする。
【0049】
本発明を実現するためのソフトウェア群112〜118について説明する。
【0050】
ネットワークインターフェース層112は、Ethernet(登録商標)のような有線ネットワーク、若しくは、IEEE802.11aやIEEE802.11bのような無線ネットワークなどネットワーク500に対応したネットワークパケットによる送受信や通信制御を行うためのソフトウェアである。
【0051】
ネットワークプロトコル層113は、USBパケットに対してIP(Internet Protocol)ヘッダの付加、取り外しの処理を行い、ネットワーク500を介して接続されているデバイスサーバ200との間のデータ通信を制御するソフトウェアである。
【0052】
常駐サービス114は、クライアントPC100が起動するとともに動作を開始してデバイスサーバ200を監視するソフトウェアである。また、後述するUSB仮想バスドライバ115をロードするソフトウェアである。
【0053】
さらに、常駐サービス114は、ネットワークプロトコル層113とネットワークインターフェース層112を介してUDPなどを用いてデバイスサーバ200と通信し、デバイスサーバ200との接続状態及びプリンタ300との接続状態を定期的に確認する。
【0054】
ここで、デバイスサーバ200との間の接続状態とは、ネットワーク500との物理的な接続状態及び他のクライアントPCとのセッションの有無などが含まれる。また、プリンタ300の接続状態とは、プリンタ300とでデバイスサーバ200をローカル接続している接続ケーブル400の接続状態及びプリンタ300の電源オン・オフなどの状態が含まれる。
【0055】
USB仮想バスドライバ115は、クライアントPCに擬似的にプリンタ300(デバイス)が接続されたようにシミュレートし、OS110のモジュールであるUSBプリンタクラスドライバ116をロードするソフトウェアである。また、後述するUSBフィルタドライバ117からの通知に基づいてデバイスサーバ200との間のセッション制御を行うソフトウェアである。
【0056】
USBプリンタクラスドライバ116は、プラグアンドプレイイベントを生成し、また、制御コマンドを送受信するためのUSBポートを作成するとともに、その上位にUSBフィルタドライバ117及びプリンタドライバ118をロードするソフトウェアである。さらに、後述するプリンタドライバ118で生成される制御コマンドをUSBパケットに変換し、USBパケットを制御コマンドに変換するソフトウェアである。
【0057】
USBフィルタドライバ117は、USBポートの「オープン」、「クローズ」やUSBポートを通過する制御コマンドの送受信を監視するソフトウェアである。また、監視した情報(以下、監視結果)をもとに、USB仮想バスドライバ115と連携することで、セッション接続の開始、終了を制御するソフトウェアである。
【0058】
なお、セッション接続の開始、終了は、USBポートの「オープン」、「クローズ」の監視結果をもとにして制御するが、さらにUSBポートを通過する制御コマンドの送受信の監視結果を組み合わせて制御することも可能である。本発明の実施の形態では、USBポートの「オープン」、「クローズ」の監視結果とUSBポートを通過する制御コマンドの送受信の監視結果を組み合わせて制御する場合を例にして説明する。
【0059】
プリンタドライバ118は、OS110やアプリケーションプログラム111など上位層のソフトウェア(以下、上位層のソフトウェア)の指示により、デバイスであるプリンタ300に対する制御コマンドを生成し、この制御コマンドに対する応答を待つソフトウェアである。また、上位層のソフトウェアの指示に応じてUSBポートの「オープン」、「クローズ」を制御するソフトウェアである。
【0060】
次に、デバイスサーバ200について説明する。デバイスサーバ200は、PC100A,100Bとデバイスであるプリンタ300と間の接続制御を行う装置である。
【0061】
図3は、デバイスサーバ200のハードウェア構成及びソフトウェア構成の一例を示すブロック図である。
【0062】
デバイスサーバ200は、CPU201、入力部202、表示部203、ROM204、RAM205、通信部206、USB
I/F(インターフェース)207などから構成されており、これらが内部バス208で接続されている。
【0063】
ROM(Read Only Memory)204には、OS210、制御プログラム211、本発明を実現するためのソフトウェア群212〜213(後述)など各種ソフトウェアが記録されており、これらソフトウェアは、CPU201の制御に従い、RAM205上に読み出されて実行される。
【0064】
USBインターフェース207は、接続ケーブル400を介してプリンタ300とローカル接続するためのインターフェースである。
【0065】
通信部206は、ネットワーク500(有線又は無線ネットワーク)に接続してPC100との間でデータ通信するためのインターフェースである。
【0066】
本発明を実現するためのソフトウェア群212〜213について説明する。
【0067】
通信層212は、ネットワークに接続された通信部206の制御を行うとともに、ネットワーク500に接続されているPC100との間のセッション制御やネットワークパケットによる通信を行うソフトウェアである。
【0068】
また、USBコマンド層213との間で通信するため、ネットワークパケットとUSBパケットとの変換を行う。ネットワークパケットはUSBパケットにIPヘッダを付加して作成するため、変換にはIPヘッダの取り付け及び取り外しを行う。
【0069】
USBコマンド層213は、USBパケットに基づいて、プリンタ300との間でデータ通信を行うソフトウェアである。
【0070】
なお、通信層212、USBコマンド層213は、プリンタ300内に内蔵する構成であっても良い。また、通信層212の機能を備えたソフトウェアを別筐体内に設け、デバイス(プリンタ300)に接続可能なインターフェースを有した外付けアダプタの形態として構成してもよい。この場合は、USBコマンド層213の機能を持つソフトウェアは、プリンタ300側のRAMや外部記憶装置などに記録しておく構成とする。
【0071】
プリンタ300は、PC100で作成した文字データや画像データ、図形データなどを紙やシートなどの媒体に印刷する装置(デバイス)である。
【0072】
なお、本発明の実施の形態は、デバイスとしてプリンタを例に説明しているが、例えば、ストレージやスキャナなど、別の機能を備えたデバイスであってもよく、更に、多機能周辺装置(MFP)のように複数の機能を備えたデバイスであってもよい。
【0073】
ここで、上述した図2及び図3で各ソフトウェア構成を説明したPC100とデバイスサーバ200間の通信、PC100とプリンタ300間の通信の大まかな流れについて図4を参照しながら説明する。
【0074】
まず、PC100からプリンタ300へデータ送信を行う場合について説明する。
【0075】
PC100においてプリンタ300へのアクセス要求が発生すると、プリンタドライバ118は、アクセス要求の内容に応じて制御コマンドを生成し、USBポートを「オープン」させる。そして、生成した制御コマンドをUSBポートからUSBフィルタドライバ117を経由してUSBプリンタクラスドライバ116へ送る。
【0076】
USBフィルタドライバ117は、USBポートが「オープン」し、制御コマンドが当該USBポートを通過するとこれを検知してUSB仮想バスドライバ115に通知し、USB仮想バスドライバ115は、デバイスサーバ200との間でセッション接続が開始されていない場合、デバイスサーバ200に対してセッション開始要求を送る。
【0077】
USBプリンタクラスドライバ116は、USBフィルタドライバ117を経由して送られてきた制御コマンドをUSBパケットに変換し、USB仮想バスドライバ115へ送る。
【0078】
USB仮想バスドライバ115では、デバイスサーバ200との間でセッション接続を開始すると、USBプリンタクラスドライバ116から送られてくるUSBパケットをネットワークプロトコル層113に送る。
【0079】
ネットワークプロトコル層113は、USB仮想バスドライバ115から送られてきたUSBパケットにIPヘッダを付加し、ネットワーク500に適した形式のデータであるネットワークパケットを作成する。
【0080】
ネットワークインターフェース層116は、ネットワークプロトコル層115で作成されたネットワークパケットをネットワーク500を介してデバイスサーバ200に送出する。
【0081】
このように、デバイスサーバ200の通信層212とPC100のUSB仮想バスドライバ115の間は、信頼性のあるTCPプロトコルを用いており、セッション接続の開始・終了は、PC100のUSBフィルタドライバ117がUSBポートの「オープン」、「クローズ」の状態やUSBポートにおけるコマンドデータの送受信状態を監視し、USB仮想バスドライバ115と連携することによって制御している。
【0082】
サーバ200では、まず、通信層212で、PC100からネットワーク500を介して送信されたネットワークパケットを受信し、ネットワークパケットからIPヘッダを取り外すことでUSBパケットに変換し、これをUSBコマンド層213へ送る。
【0083】
USBコマンド層213では、通信層212から送られたUSBパケットを、接続ケーブル400を介してプリンタ300へ送る。
【0084】
プリンタ300は、デバイスサーバ200から送られてきたUSBパケットを制御コマンドに変換して解析し、解析結果に応じた印刷処理を実行する。
【0085】
次に、プリンタ300からPC100へデータ送信(応答)を行う場合について説明する。
【0086】
上述した印刷処理などを行ったプリンタ300は、その結果をPC100に対する応答コマンドとしてUSBパケットでデバイスサーバ200へ送る。
【0087】
デバイスサーバ200では、USBコマンド層213がプリンタからの応答コマンドであるUSBパケットを受け取り、それを通信層212へ送る。
【0088】
通信層212では、USBコマンド層213からのUSBパケットにIPヘッダを付加し、ネットワーク500に適した形式のデータであるネットワークパケットを作成し、ネットワーク500を介してPC100に送出する。
【0089】
このようにして、PC100とプリンタ300との間でデバイスサーバ200を介したデータ通信が実行されることになる。
【0090】
次に、PC100(PC100A,PC100B)の基本制御フローについて、図5及び図6を参照しながら説明する。まず、図5は、PC100がプリンタ300にアクセスして印刷処理を実行するために必要なデバイスドライバをロードするまでの制御動作の手順を示すフローチャートである。
【0091】
ユーザがPC100を起動すると、PC100内のソフトウェア群の中の常駐サービス114が動作し、UDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する。(ステップS501)。
【0092】
常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200が他のクライアントPCとセッション接続中か否か判断するとともに、プリンタ300との接続状態を判断する(ステップS502)。
【0093】
プリンタ300との接続が正常な状態でない、又は、デバイスサーバ200が他のクライアントPCとセッション接続中の場合(ステップS502でNo)、再び、ステップS501の処理に戻り、定期的にデバイスサーバ200の状態及びプリンタ300の接続状態の確認を行う。
【0094】
プリンタ300との接続が正常であり、デバイスサーバ200が他のクライアントPCとセッション接続中でない場合(ステップS502でYes)、常駐サービス114はUSB仮想バスドライバ115をロードする(ステップS503)。
【0095】
常駐サービス114は、USB仮想バスドライバ115をロードが完了すると、デバイスドライバのマウント命令を発行する(ステップS504)。
【0096】
USB仮想バスドライバ115は、デバイスドライバのマウント命令が発行されると、デバイスサーバ200に対してセッション開始要求を送る(ステップS505)。
【0097】
デバイスサーバ200との間でセッション接続が開始できなかった場合(ステップS506でNo)、常駐サービス114は、アンマウント命令を発行し(ステップS513)、USB仮想バスドライバ115をアンロードして(ステップS514)、再びステップS501の処理に戻る。
【0098】
デバイスサーバ200との間のセッション接続が開始されると(ステップS506でYes)、USB仮想バスドライバ115は、デバイスサーバ200に対して、プリンタ300のデバイスドライバをロードするために必要となるデバイス情報を要求する(ステップS507)。
【0099】
このとき、デバイスサーバ200は、PC100からのデバイス情報の要求をプリンタ300に送り、プリンタ300からデバイス情報の応答があると、このデバイス情報をPC100に返す。
【0100】
PC100では、USB仮想バスドライバ115がデバイス情報の応答を受けて、プリンタ300が擬似的に接続されたようにシミュレートし、取得したデバイス情報に基づき、USBプリンタクラスドライバ116をロードする。(ステップS508)。
【0101】
USBプリンタクラスドライバ116は、USBポートを作成するとともに、その上位にUSBフィルタドライバ117及びプリンタドライバ118をロードする(ステップS509、ステップS510)。
【0102】
プリンタドライバ118のロードが完了すると、USB仮想バスドライバ115は、デバイスサーバ200に対してセッション終了要求を送る(ステップS511)。そして、デバイスサーバ200との間のセッションの終了処理を行い、PC100とデバイスサーバ200との間のセッションを終了する(ステップS512)。
【0103】
セッションが終了すると、PC100には、プリンタ300にアクセスして印刷するために必要なデバイスドライバが全てロードされた状態となる。そして、上位層のソフトウェア)から実行指示(以下、印刷実行命令)が発行されるまでの間、待機状態となる。
【0104】
次に、PC100(PC100A,PC100B)において、上位層のソフトウェアから印刷実行命令が発行されてプリンタ300に印刷処理を実行させるときの制御動作の手順を図6に示すフローチャートを参照しながら説明する。
【0105】
なお、上述した図5で説明したように、PC100には、必要なデバイスドライバが全てロードされており、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態にあるものとして説明する。
【0106】
PC100によりプリンタ300で印刷処理を実行させるとき、上位層のソフトウェアから印刷実行命令が発行される(ステップS601)。
【0107】
上位層のソフトウェアから印刷実行命令が発行されると、PC100のプリンタドライバ118は、印刷実行命令に応じた制御コマンドを生成し、USBポートを「オープン」する(ステップS602)。
【0108】
そして、生成した制御コマンドをUSBポートからUSBフィルタドライバ117を経由してプリンタクラスドライバ116に送る。プリンタクラスドライバ116では、制御コマンドをUSBパケットに変換し、USB仮想バスドライバ115に送る(ステップS603)。
【0109】
USBフィルタドライバ117は、USBポートが「オープン」し、制御コマンドが当該USBポートを通過するとこれを検知してUSB仮想バスドライバ115に通知し、USB仮想バスドライバ115は、セッションが接続されていない場合、デバイスサーバ200に対してセッション開始要求を送る(ステップ604)。
【0110】
このセッション開始要求に対し、デバイスサーバ200から「NG」応答があり、セッション接続を開始できない場合(ステップS605でNo)、ステップS604へ戻り、セッション接続が開始可能となるまで、デバイスサーバ200に対して定期的にセッション開始要求を送る。
【0111】
一方、デバイスサーバ200から「OK」応答があると(ステップS605でYes)、PC100はデバイスサーバ200とのセッション接続を開始する(ステップS606)。これによって、PC100は、デバイスサーバ200を介してプリンタ300へアクセスして印刷処理が可能となる。
【0112】
PC100は、上位層のソフトウェアからの指示に応じた制御コマンドを生成してデバイスサーバ200に送り、プリンタ300は、デバイスサーバ200から受信した制御コマンドに応じた印刷処理を実行し、その結果などをデバイスサーバ200に応答する(ステップS607)。
【0113】
そして、上位層のソフトウェアから終了指示(以下、印刷終了命令)が発行されるまでステップS607の処理が繰り返される(ステップS608でNo)。
【0114】
PC100の上位層のソフトウェアから印刷終了命令が発行されるとプリンタドライバ118は印刷終了命令に応じた制御コマンド(以下、終了コマンド)を生成し、USB仮想バスドライバ115を介して終了コマンドをデバイスサーバ200に送信する(ステップS608でYes)。
【0115】
このとき、デバイスサーバ200では、PC100から受信した終了コマンドをプリンタ300に送信し、プリンタ300からの終了コマンドに対する応答を受信してPC100Aに送る処理を実行する。
【0116】
PC100のプリンタドライバ118は、終了コマンドに対する応答を受信すると、USBポートを「クローズ」し、USBフィルタドライバ117は、USBポートの「クローズ」をUSB仮想バスドライバ115に通知する(ステップS609)。
【0117】
USB仮想バスドライバ115は、USBポート「クローズ」の通知を受けると、デバイスサーバ200に対してセッション終了要求を送る(ステップS610)。
【0118】
デバイスサーバ200からセッション終了「OK」の応答を受信すると、USB仮想バスドライバ115は、PC100Aとデバイスサーバ200との間のセッションを終了する(ステップS611)。そして、再び、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【0119】
なお、クライアントPCは、セッションが終了した後も常駐サービス114によって定期的に(例えば、1分間隔)デバイスサーバ200との間の接続状態を監視し、プリンタ300との接続状態を確認している。
【0120】
従って、デバイスサーバ200との間のネットワーク500が終了、電源断、又は、プリンタ300の接続ケーブル断、電源断などの異常を検出した場合、常駐サービス114からアンマウント命令を発行し、ロードされているデバイスドライバ(プリンタドライバ118、USBフィルタドライバ117、USBプリンタクラスドライバ116、USB仮想デバイスドライバ115)をアンロードするようにしてもよい。
【0121】
本実施の形態では、デバイスドライバのロードが完了した際にセッション接続を一旦終了させる(図5参照)。そして、クライアントPCにおけるUSBポートの「オープン」及び「クローズ」の状態と当該USBポートを通過する制御コマンドの送受信状態に基づいてセッション接続の開始、終了を行うことを特徴とする(図6参照)。
【0122】
次に、デバイスサーバ200の制御動作について図7を参照しながら説明する。
【0123】
デバイスサーバ200では、PC100からのパケットの受信を監視している。
【0124】
セッション開始要求のパケットを受信した場合(ステップS701でYes)、他のPC100とセッション接続中であるか否かを確認する(ステップS702)。
【0125】
既にセッション接続が開始されている場合(ステップS702でYes)、このPC100に対して「NG」を返す(ステップS703)。
【0126】
セッション接続が開始されていない場合(ステップS702でNo)、このPC100とセッション接続を開始し(ステップ704)、セッション接続が完了すると、応答コマンドとして「OK」を返す(ステップS705)。
【0127】
一方、上述したステップS701の処理において、セッション開始終了要求以外のパケットを受信したが送られてきた場合(ステップS701でNo)、セッション終了要求であれば(ステップS706でYes)、セッション接続中のPC100との間のセッションを終了し(ステップS707)、応答コマンドとして「OK」を返す(ステップS708)。
【0128】
一方、上述したステップS706の処理において、セッション終了要求以外のパケットを受信した場合(ステップS706でNo)、そのパケットの種類に応じた応答処理を実行する(ステップS709)。
【0129】
次に、上述したネットワークシステムにおいて、PC100Aからプリンタ300にアクセスして印刷処理を実行させて終了するまでの具体的なタイミングチャートについて説明する。
【0130】
簡略化して分り易く説明するために、まず、PC100A一台だけがプリンタ300にアクセスする場合(1対1で接続する場合)について、図8を参照しながら説明する。
【0131】
はじめに、図5で示したように、PC100において、プリンタ300のアクセスに必要なデバイスドライバが全てロードされ、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となるまでの過程を説明する。
【0132】
ここでは、他のクライアントPCからのセッション開始要求の有無を考慮せず、PC100Aからのセッション開始要求に対して、デバイスサーバ200は常に「OK」を応答するものとする。
【0133】
ユーザがPC100Aを起動すると、PC100A内のソフトウェア群の中の常駐サービス114が動作する。そして、UDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する(タイミングT801)。
【0134】
PC100Aの常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200が他のクライアントPCとセッション接続中でなく、プリンタ300が正常に接続されていることを確認すると、USB仮想バスドライバ115をロードし、デバイスドライバのマウント命令を発行する(タイミングT802)。
【0135】
USB仮想バスドライバ115のロードが完了すると、USB仮想バスドライバ115は、デバイスサーバ200に対してセッション開始要求を送る(タイミングT803)。
【0136】
デバイスサーバ200が、PC100Aに対して「OK」を応答すると、PC100Aとデバイスサーバ200の間のセッション接続が開始される(タイミングT804)。
【0137】
セッション接続が開始され、デバイスサーバ200を介してプリンタ300へのアクセスが可能となると、PC100Aは、デバイスサーバ200に対してデバイス情報を要求する(タイミングT805)。
【0138】
デバイスサーバ200は、PC100Aからのデバイス情報の要求をプリンタ300に送り(タイミングT806)、プリンタ300からデバイス情報の応答があると(タイミングT807)、このデバイス情報をPC100Aに返す(タイミングT808)。
【0139】
PC100Aでは、取得したデバイス情報に基づき、USB仮想バスドライバ115によって擬似的にプリンタ300が接続されたようにシミュレートし、OS110のモジュールであるUSBプリンタクラスドライバ116をロードする。
【0140】
USBプリンタクラスドライバ116は、USBポートを作成するとともに、その上位にUSBフィルタドライバ117及びプリンタドライバ118をロードする(タイミングT809)。
【0141】
プリンタドライバ118のロードが完了すると、USB仮想バスドライバ115は、デバイスサーバ200に対してセッション終了要求を送り、PC100Aとデバイスサーバ200との間のセッションを終了する(タイミングT810)。
【0142】
この時点で、PC100Aには、プリンタ300のアクセスに必要なデバイスドライバが全てロードされ、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【0143】
続いて、図6で示したように、待機状態のPC100Aがプリンタ300に印刷処理を実行させるまでの過程を説明する。
【0144】
プリンタ300に印刷処理を実行させるため、上位層のソフトウェアから印刷実行命令が発行されると(タイミングT811)、PC100Aのプリンタドライバ118は、印刷実行命令に応じた制御コマンドを生成し、USBポートを「オープン」する(タイミングT812)。
【0145】
そして、生成した制御コマンドをUSBポートからUSBフィルタドライバ117を経由してUSBプリンタクラスドライバ116に送る。USBプリンタクラスドライバ116では、送られてきた制御コマンドをUSBコマンドに変換してUSB仮想バスドライバ115に送る(タイミングT813)。
【0146】
USBフィルタドライバ117は、USBポートが「オープン」し、制御コマンドが当該USBポートを通過するとこれを検知してUSB仮想バスドライバ115に通知し、セッションが接続されていない場合、USB仮想バスドライバ115は、デバイスサーバ200に対してセッション開始要求を送る(タイミングT814)。
【0147】
デバイスサーバ200から、セッション開始要求に対する「OK」応答を受信すると、PC100Aはデバイスサーバ200との間のセッション接続を開始する(タイミングT815)。
【0148】
PC100AのUSB仮想バスドライバ115では、デバイスサーバ200から「OK」応答があり、セッション接続が開始されると、プリンタ300に対する制御コマンドをデバイスサーバ200へ送信する(タイミングT816)。
【0149】
デバイスサーバ200は、制御コマンドを受信すると、これをプリンタ300に送信する(タイミングT817)。プリンタ300は、この制御コマンドに応じて印刷処理を実行し、その実行結果の応答をデバイスサーバ200に返す(タイミングT818)。デバイスサーバ200はプリンタ300からの応答をPC100Aに送る(タイミングT819)。
【0150】
この後、デバイスサーバ200を介してPC100Aとプリンタ300との間でデータ通信が行われ、印刷処理が実行される。
【0151】
PC100Aの上位層のソフトウェアから印刷終了命令が発行されると、プリンタドライバ118は、終了コマンドを生成し、USB仮想バスドライバ115を介してデバイスサーバ200に送信する(タイミングT820)。
【0152】
デバイスサーバ200は、受信した終了コマンドをプリンタ300に送信し(タイミングT821)、プリンタ300から終了コマンドに対する応答を受信すると(タイミングT822)、この応答をPC100Aに送る(タイミングT823)。
【0153】
PC100Aのプリンタドライバ118は、終了コマンドに対する応答を受信すると、USBポートを「クローズ」し、USBフィルタドライバ117は、USBポートの「クローズ」をUSB仮想バスドライバ115に通知する(タイミングT824)。
【0154】
USB仮想バスドライバ115は、USBポート「クローズ」の通知を受けると、デバイスサーバ200に対してセッション終了要求を送る(タイミングT825)。そして、デバイスサーバ200との間でセッション終了処理を実行し、セッション終了「OK」の応答を受信すると、PC100Aとデバイスサーバ200との間のセッションが終了する(タイミングT826)。
【0155】
次に、実際の運用により近いケースとして、前述のネットワークシステムにおいて、複数台のPC100(PC100A,PC100B)がプリンタ300にアクセスする場合(N対1で接続する場合)について、図9を参照しながら説明する。
【0156】
図9は、PC100Aがセッション接続中のとき、若しくは、プリンタ300にアクセス中のときに、別のPC100Bからプリンタ300にアクセスしたときのタイミングチャートを示した説明図である。なお、PC100Aについては、前述した図8と同じ動作であるため、詳細な説明は省略する。
【0157】
まず、PC100Aがデバイスドライバのロード中に、PC100Bからプリンタ300にアクセスしようとした場合について説明する。
【0158】
PC100Aは、常駐サービス114によりUDPなどでデータ通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する(タイミングT901)。
【0159】
PC100Bも同様に、常駐サービス114によりUDPなどでデータ通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する(タイミングT902)。
【0160】
PC100Aの常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200が他のクライアントPCとセッション接続中でないことを確認すると、USB仮想バスドライバ115をロードし、デバイスドライバのマウント命令を発行する(タイミングT903)。
【0161】
ここまでは、PC100A、PC100Bはともに、常駐サービス114によりUDPなどでデバイスサーバ200とデータ通信するため、セッションを使用(専有)することはない。
【0162】
ここで、PC100Aにおいて、ロードが完了したUSB仮想バスドライバ115からデバイスサーバ200に対してセッション開始要求が送られ、デバイスサーバ200から「OK」の応答があると、PC100Aとデバイスサーバ200との間でセッション接続が開始される(タイミングT904)。
【0163】
PC100Aとデバイスサーバ200との間でセッション接続を開始すると、PC100Aがデバイスドライバのロードを完了するまでの間、デバイスサーバ200と間のセッションの接続は継続される(タイミングT905)。
【0164】
PC100Bが、USB仮想バスドライバ115をロードし、デバイスドライバのマウント命令を発行し(タイミングT906)、デバイスサーバ200に対してセッション開始要求を送った場合、既に、PC100Aとの間でセッション接続が開始されているため、PC100Aにおいてデバイスドライバのロードが完了するまでの間(セッションが終了されるまでの間)、デバイスサーバ200はPC100Bに対して「NG」応答を返す(タイミングT907)。
【0165】
PC100Bでは、「NG」応答を受信すると、常駐サービス114によりデバイスサーバ200のセッションの接続状態を定期的に確認する。
【0166】
デバイスサーバ200では、PC100Aにおいて必要なデバイスドライバのロードが完了し、セッション接続が終了した後(タイミングT908)、PC100Bからセッション開始要求を受信すると、PC100Bとの間でセッション接続を開始し(タイミングT909)、PC100Bがデバイスドライバのロードを完了するまでの間、PC100Bと間のセッション接続は継続される。
【0167】
デバイスサーバ200は、PC100Bとの間でセッション接続中は、上述と同様にPC100Aなど他のクライアントPCからのセッション開始要求に対して「NG」応答を返す。
【0168】
上述したように、セッション接続中のクライアントPCに必要なデバイスドライバのロードが完了するまでの間、他のクライアントPCとの間でセッション接続を行わないため、デバイスドライバのロード中は排他制御される。また、セッション接続したときにデバイス情報を取得するので、プリンタ300の最新のデバイス情報を得ることが可能である。
【0169】
続いて、PC100Aがプリンタ300にアクセス中(印刷処理中)に、PC100Bからプリンタ300にアクセスしようとした場合について説明する。
【0170】
この時点で、PC100A、PC100Bには、プリンタ300にアクセスして印刷するために必要なデバイスドライバが全てロードされた状態であるものとする。
【0171】
まず、PC100Aでは、上位層のソフトウェアから印刷実行命令が発行され(タイミングT910)、デバイスサーバ200との間でセッション接続が開始されると(タイミングT911)、デバイスサーバ200を介してプリンタ300へのアクセスが可能となり、デバイスサーバ200に対して制御コマンドを送信し、プリンタ300で印刷処理が実行される(タイミングT912)。
【0172】
PC100Aがプリンタ300へアクセス中(印刷処理中)の間、デバイスサーバ200との間はセッション接続中のままである。
【0173】
このとき、PC100Bによって印刷実行命令が発行されると(タイミングT913)、PC100Aと同様に、PC100Bのプリンタドライバ118がプリンタ300に対する制御コマンドを生成し、USBポートを「オープン」する(タイミングT914)。
【0174】
そして、PC100BのUSBフィルタドライバ117は、USBポートが「オープン」し、制御コマンドが当該USBポートを通過するとこれを検知して仮想バスドライバ115に通知し、仮想バスドライバ115がデバイスサーバ200に対してセッション開始要求を送る(タイミングT915)。
【0175】
しかし、既に、PC100Aがプリンタ300にアクセスし、印刷処理が実行中であるため、デバイスサーバ200は、PC100Aと間のセッション接続が終了されるまでの間、PC100Bのセッション開始要求に対して「NG」応答を返す(タイミングT916)。
【0176】
PC100Bでは、「NG」応答を受信すると、常駐サービス114によりデバイスサーバ200のセッション接続を定期的に確認する。
【0177】
デバイスサーバ200では、PC100Aとの間のセッション接続が終了された後(タイミングT917)、PC100Bからの「セッション開始要求」を受信すると、PC100Bとの間でセッション接続を開始する(タイミングT918)。そして、PC100Bによるプリンタ300へのアクセスが完了するまでの間、PC100Bとデバイスサーバ200との間のセッション接続は継続される。
【0178】
このように、第1の実施の形態におけるクライアントPCは、プリンタ300にアクセス可能な状態のときにユーザの手動操作に頼ることなく自動的にデバイスサーバ200とのセッション接続を開始してデバイス情報を取得し、デバイスドライバをロード後、セッション接続を終了して、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【0179】
そして、上位層のソフトウェアから印刷実行命令が発行されると、プリンタ300にアクセスが可能であれば、ユーザの手動操作に頼ることなく自動的にデバイスサーバ200とのセッション接続を開始してプリンタ300における印刷実行に必要なコマンドを送受信し、印刷が終了するとユーザの手動操作に頼ることなく自動的にセッション接続を終了する。これにより、ユーザがセッション接続の開始・終了を意識しなくても、複数台のクライアントPCでデバイスを共有することが可能となる。
【0180】
次に、第2の実施の形態について説明する。本実施の形態は、デバイスドライバをロードするまでの過程において、セッション接続を必要としないUDPなどによりデバイスサーバ200とデータ通信してデバイス情報を取得する点が第1の実施の形態と異なる。
【0181】
図10は、第1の実施の形態で説明した図5と同様、PC100(PC100A,PC100B)の制御フローであり、PC100がプリンタ300にアクセスして印刷処理を実行するために必要なデバイスドライバをロードするまでの制御動作の手順を示すフローチャートである。
【0182】
ユーザがPC100を起動すると、PC100内のソフトウェア群の中の常駐サービス114が動作し、UDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する。(ステップS1001)。
【0183】
続いて、常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200との接続を確認する(ステップS1002)。
【0184】
ここで、デバイスサーバ200又はプリンタ300との接続が正常でない場合(ステップS1002でNo)、再び、ステップS1001の処理に戻り、定期的にデバイスサーバ200の状態を確認する。
【0185】
デバイスサーバ200からの応答により、デバイスサーバ200及びプリンタ300との接続が正常である場合(ステップS1002でYes)、常駐サービス114は、USB仮想バスドライバ115をロードする(ステップS1003)。
【0186】
USB仮想バスドライバ115をロードが完了すると、常駐サービス114は、デバイスドライバのマウント命令を発行する(ステップS1004)。
【0187】
マウント命令が発行されると、USB仮想ドライバ115は、デバイスサーバ200との間をセッション接続が必要ないUDPなどを用いてデータ通信する。そして、デバイスサーバ200に対して、プリンタ300のデバイスドライバをロードするために必要となるデバイス情報を要求する(ステップS1005)。
【0188】
このとき、デバイスサーバ200では、PC100から受信したデバイス情報の要求をプリンタ300に送信し、プリンタ300から応答情報としてデバイス情報を受信してPC100Aに送る処理を実行する。
【0189】
PC100では、取得したデバイス情報に基づき、USB仮想バスドライバ115によって擬似的にプリンタ300が接続されたようにシミュレートし、USBプリンタクラスドライバ116をロードする(ステップS1006)。
【0190】
USBプリンタクラスドライバ116は、USBポートを作成するとともに、その上位にUSBフィルタドライバ117及びプリンタドライバ118をロードする(ステップS1007、ステップS1008)。
【0191】
プリンタドライバ118のロードが完了すると、プリンタ300にアクセスして印刷するために必要なデバイスドライバがPC100に全てロードされた状態となる。そして、上位層のソフトウェアからの印刷実行命令が発行されるまでの間、待機状態となる。
【0192】
本実施の形態において、PC100は、UDPなどを用いてデバイスサーバ200とデータ通信しているので、セッション接続せずに必要なデバイスドライバをロードすることができる。なお、データ通信はセッション接続を必要としないプロトコルであればよく、UDPに限定されるものではない。
【0193】
図9と同様に、前述のネットワークシステムにおいて、複数台のPC100(PC100A,PC100B)がプリンタ300にアクセスする場合(N対1で接続する場合)の実施の形態について、図11を参照しながら説明する。
【0194】
図11は、PC100Aがデバイスドライバのロード中に、別のPC100Bからプリンタ300にアクセスしたときのタイミングチャートを示した説明図である。なお、PC100A及びPC100Bにおいて、デバイスドライバがロードされた後の動作については、第1の実施の形態(図9)と同じであるため、説明は省略する。
【0195】
PC100A、PC100Bはともに、常駐サービス114によってセッション接続が必要ないUDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する(タイミングT1101)。
【0196】
次に、PC100A、PC100Bの常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200及びプリンタ300との接続が正常であることを確認すると、USB仮想バスドライバ115をロードし、デバイスドライバのマウント命令を発行する(タイミングT1102)。
【0197】
そして、PC100A、PC100BのUSB仮想バスドライバ115は、UDPなどを用いてデバイスサーバ200と通信してデバイス情報を要求する(タイミングT1103)。
【0198】
デバイスサーバ200はPC100A、PC100Bからのデバイス情報の要求をプリンタ300に送り、プリンタ300からデバイス情報の応答があると、このデバイス情報をPC100A、PC100Bに対して返す(タイミングT1104)。
【0199】
PC100A、PC100Bは、取得したデバイス情報に基づき、それぞれのUSB仮想バスドライバ115によって、USBプリンタクラスドライバ116、USBフィルタドライバ117、プリンタドライバ118を順にロードしてゆく(タイミングT1105)。
【0200】
このように、第2の実施の形態におけるクライアントPCは、プリンタ300にアクセス可能な状態のときにユーザの手動操作に頼ることなく自動的にセッション接続が必要ないUDPでデバイスサーバ200と通信してデバイス情報を取得し、デバイスドライバをロード後、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【0201】
そして、上位層のソフトウェアから印刷実行命令が発行されると、プリンタ300にアクセスが可能であれば、ユーザの手動操作に頼ることなく自動的にデバイスサーバ200とのセッション接続を開始してプリンタ300における印刷実行に必要なコマンドを送受信し、印刷が終了するとユーザの手動操作に頼ることなく自動的にセッション接続を終了する。これにより、ユーザがセッション接続の開始、終了を意識しなくても、複数台のクライアントPCでデバイスを共有することが可能となる。
【0202】
次に、第3の実施の形態について説明する。本実施の形態は、PC100内にデバイスドライバのロードに必要な情報をキャッシュしている場合、このキャッシュされた情報に基づいて、デバイスサーバ200とデータ通信せずにデバイスドライバをロードする点が上述の実施の形態と異なる。
【0203】
図12は、PC100がプリンタ300にアクセスして印刷処理を実行するために必要なデバイスドライバをロードするまでの制御動作の手順を示すフローチャートである。
【0204】
ユーザがPC100を起動すると、PC100内のソフトウェア群の中の常駐サービス114が動作し、UDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する。(ステップS1201)。
【0205】
常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200及びプリンタ300との接続状態を確認する(ステップS1202)。
【0206】
デバイスサーバ200及びプリンタ300との接続状態が正常でない場合(ステップS1202でNo)、再び、ステップS1201の処理に戻り、定期的にデバイスサーバ200及びプリンタ300との接続状態の確認を行う。
【0207】
デバイスサーバ200からの応答により、デバイスサーバ200及びプリンタ300との接続状態が正常である場合(ステップS1202でYes)、常駐サービス114は、USB仮想バスドライバ115をロードする(ステップS1203)。
【0208】
常駐サービス114は、USB仮想バスドライバ115をロードが完了すると、デバイスドライバのマウント命令を発行する(ステップS1204)。
【0209】
マウント命令が発行されると、USB仮想ドライバ115は、プリンタ300のデバイスドライバのロードに必要となるデバイス情報をPC100内(自装置内)に既に保持(キャッシュ)しているかを確認する(ステップS1205)。
【0210】
PC100内(自装置内)にキャッシュされた情報(以下、キャッシュ情報)がない場合(ステップS1205でNo)、PC100は、UDPによりデバイスサーバ200とデータ通信して、デバイスドライバのロードに必要となるデバイス情報を取得する(ステップS1206)。
【0211】
PC100内(自装置内)にキャッシュ情報がある場合(ステップS1205でYes)、ステップS1207の処理はスキップし、次の処理ステップS1208に移る。
【0212】
USB仮想バスドライバ115は、キャッシュ情報若しくは、サーバ200を介して取得したデバイス情報に基づき、擬似的にプリンタ300が接続されたようにシミュレートし、OS110のモジュールであるUSBプリンタクラスドライバ116をロードする(ステップS1207)。
【0213】
USBプリンタクラスドライバ116は、USBポートを作成するとともに、その上位にUSBフィルタドライバ117及びプリンタドライバ118をロードする(ステップS1208、ステップS1209)。
【0214】
プリンタドライバ118のロードが完了すると、プリンタ300にアクセスして印刷するために必要なデバイスドライバがPC100に全てロードされた状態となる。そして、上位層のソフトウェアからの印刷実行命令が発行されるまでの間、待機状態となる。
【0215】
第3の実施の形態において、PC100は、自装置内にキャッシュ情報がある場合、デバイスサーバ200との間でデータ通信を行うことなく、デバイスドライバをロードすることができる。
【0216】
一方、自装置内にキャッシュ情報がない場合、上述した第2の実施の形態と同様、UDPによりデバイスサーバ200と通信してデバイス情報を取得するので、セッション接続する必要がない。なお、デバイスサーバ200との通信はUDPに限定されるものではない。
【0217】
PC100A及びPC100Bにおいて、キャッシュ情報に基づいてデバイスドライバをロードするときのタイミングチャートについて図13を用いて説明する。なお、PC100A及びPC100Bにおいて、デバイスドライバがロードされた後の動作については、前述した第1の実施の形態(図9)と同じであるため、説明は省略する。
【0218】
また、自装置内にキャッシュ情報がなく、UDPなどを用いてデバイスサーバ200と通信してデバイス情報を取得する場合の動作については、前述した第2の実施の形態(図10、図11)と同じであるため説明及び図13中における図示は省略する。
【0219】
PC100A及びPC100Bは、プリンタ300のネットワーク共有を行うための初期設定や、常駐サービス114、プリンタドライバ118などのインストールを実行するとき、プリンタ300のネットワーク共有に必要なデバイス情報を、デバイスサーバ200を介してプリンタ300から予め取得して、これをPC100A及びPC100Bの外部記憶部106に格納している(タイミングT1301)。このとき格納されたデバイス情報が、キャッシュ情報としてデバイスドライバのロードの際に使用される。
【0220】
PC100A、PC100Bはともに、常駐サービス114によってセッション接続が必要ないUDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する(タイミングT1302)。
【0221】
次に、PC100Aの常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200が他のクライアントPCとセッション接続中でないことを確認するとUSB仮想バスドライバ115をロードし、デバイスドライバのマウント命令を発行する(タイミングT1303)。
【0222】
USB仮想バスドライバ115は、デバイスドライバのマウント命令が発行されると、PC100A内(自装置内)にキャッシュ情報を保持しているかを確認する。
【0223】
PC100A内(自装置内)にキャッシュ情報を保持している場合、このキャッシュ情報に基づき、USBプリンタクラスドライバ116、USBフィルタドライバ117、プリンタドライバ118を順にロードしてゆく(タイミングT1304)。
【0224】
PC100Aでデバイスドライバのロード中、もう一方のクライアントPC100Bにおいて、デバイスドライバのマウント命令が発行された場合(タイミングT1305)、PC100Aと同様、まず、PC100B内(自装置内)にキャッシュ情報があるか否かを確認する。
【0225】
PC100B内(自装置内)にキャッシュ情報がある場合、このキャッシュ情報に基づいて、USBプリンタクラスドライバ116、USBフィルタドライバ117、プリンタドライバ118を順にロードしてゆく(タイミングT1306)。
【0226】
このように、第3の実施の形態におけるクライアントPCは、自装置内に保持されたキャッシュ情報に基づいてデバイスドライバをロード後、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。一方、キャッシュ情報がなければ、プリンタ300にアクセス可能な状態のときにユーザの手動操作に頼ることなく自動的にセッション接続が必要ないUDPでデバイスサーバ200と通信してデバイス情報を取得し、デバイスドライバをロード後、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【0227】
そして、上位層のソフトウェアから印刷実行命令が発行されると、プリンタ300にアクセスが可能であれば、ユーザの手動操作に頼ることなく自動的にデバイスサーバ200とのセッション接続を開始してプリンタ300における印刷実行に必要なコマンドを送受信し、印刷が終了するとユーザの手動操作に頼ることなく自動的にセッション接続を終了する。これにより、ユーザがセッション接続の開始、終了を意識しなくても、複数台のクライアントPCでデバイスを共有することが可能となる。
【0228】
また、キャッシュ情報を利用してデバイスドライバをロードするので、複数のクライアントPCがデバイスサーバ200からデバイス情報を取得しようとするアクセスが不要となるため、ネットワーク500のトラフィックを低減することができる。
【0229】
次に、第4の実施の形態として、PC100がプリンタ300にアクセスして印刷処理を実行するときの別の制御動作について、図14を参照しながら説明する。
【0230】
本実施の形態は、USBポートが「クローズ」された後、すぐにデバイスサーバ200との間のセッション接続を終了せず、規定時間だけセッション接続の終了を遅らせる点に特徴がある。
【0231】
図14は、PC100(PC100A,PC100B)の制御フローにおいて、PC100がプリンタ300にアクセスして印刷処理を実行するときの制御動作の手順を示すフローチャートである。
【0232】
なお、上述した第1の実施の形態で説明した図6と同様、PC100には、必要なデバイスドライバが全てロードされており、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態にあるものとする。
【0233】
PC100によりプリンタ300で印刷処理を実行するとき、上位層のソフトウェアから印刷実行命令が発行される。
【0234】
上位層のソフトウェアから印刷実行命令が発行されると、PC100のプリンタドライバ118は、印刷実行命令に応じた制御コマンドを生成し、USBポートを「オープン」する(ステップS1401、S1402)。
【0235】
そして、生成した制御コマンドをUSBポートからUSBフィルタドライバ117を経由してプリンタクラスドライバ116に送る。プリンタクラスドライバ116では、制御コマンドをUSBパケットに変換し、USB仮想バスドライバ115に送る(ステップS1403)。
【0236】
USBフィルタドライバ117は、USBポートが「オープン」し、制御コマンドがUSBポートを通過するとこれを検知してUSB仮想バスドライバ115に通知し、USB仮想バスドライバ115は、セッション接続がされていない場合、デバイスサーバ200に対してセッション開始要求を送る(ステップS1404)。
【0237】
このセッション開始要求に対し、デバイスサーバ200から「NG」応答があり、セッション接続を開始できない場合(ステップS1405でNo)、ステップS1404へ戻り、セッション接続が開始可能となるまで、デバイスサーバ200に対して定期的にセッション開始要求を送る。
【0238】
一方、デバイスサーバ200から「OK」応答があり(ステップS1405でYes)、セッション接続が開始されると、PC100は、デバイスサーバ200を介してプリンタ300へのアクセスが可能となる(ステップS1406)。
【0239】
次に、PC100は、デバイスサーバ200を介し、プリンタ300に対して制御コマンドを送り、プリンタ300からの処理結果などを受信する(ステップS1407)。そして、PC100から印刷終了命令が発行されるまでステップS1407の処理が繰り返される(ステップS1408でNo)。
【0240】
上位層のソフトウェアから印刷終了命令が発行されると(ステップS1408でYes)、プリンタドライバ118は、終了コマンドを生成し、USB仮想バスドライバ115を介して終了コマンドをデバイスサーバ200に送信し、プリンタ300からの終了コマンドに対する応答をデバイスサーバ200から受信する。
【0241】
PC100のプリンタドライバ118は、終了コマンドに対する応答を受信すると、USBポートを「クローズ」し、USBフィルタドライバ117は、USBポートの「クローズ」をUSB仮想バスドライバ115に通知する。(ステップS1409)。
【0242】
USB仮想バスドライバ115は、USBポートが「クローズ」され、USBポート「クローズ」の通知を受けると、デバイスサーバ200との間のセッション接続をすぐに終了させず、上位層のソフトウェアから次の印刷実行命令が規定時間内に発行されるか否かを判定する(ステップS1410)。
【0243】
規定時間内に上位層のソフトウェアから印刷実行命令が発行されると(ステップS1410でYes)、プリンタドライバ118は、制御コマンドを生成して、USBポートを「オープン」し(ステップS1411)、生成した制御コマンドをUSBポートからUSBフィルタドライバ117を経由してプリンタクラスドライバ116に送る(ステップS1412)。
【0244】
そして、再び、ステップS1407の処理に戻り、デバイスサーバ200を介し、プリンタ300に対して制御コマンドを送り、プリンタ300からの処理結果などを受信し、プリンタ300による印刷処理が開始される。
【0245】
一方、規定時間内に上位層のソフトウェアから印刷実行命令が発行されないと(ステップS1410でNo)、USB仮想バスドライバ115は、デバイスサーバ200に対しセッション終了要求を送る(ステップS1413)。
【0246】
そして、デバイスサーバ200との間でセッション終了処理を実行し、セッション終了「OK」の応答を受信すると、PC100Aとデバイスサーバ200との間のセッション接続が終了となる(ステップS1414)。そして、再び、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【0247】
このように、USBポートが「クローズ」された後、規定時間だけセッション接続の終了時間を遅らせることにより、上位層のソフトウェアから連続して印刷実行命令が出ている場合、一旦、セッション接続を終了し、再度、セッション接続するという処理が不要となる。
【0248】
従って、セッション接続は維持されるので、例えば、PC100Aから連続印刷を行っている途中に、PC100Bの印刷処理が割り込むことを抑制することができる。
【0249】
図15は、第4の実施の形態において、図14で説明した制御フローで動作するPC100(PC100A,PC100B)おいて、PC100Aが連続して印刷処理を実行するとき実施の形態である。
【0250】
ここで、簡略化して分り易く説明をするために、第4の実施の形態において、PC100A、PC100Bともに既にデバイスドライバがロードしてある状態として説明する。なお、デバイスドライバをロードするまでの制御動作は、上述の第1〜第3の実施の形態を全て適用することができる。
【0251】
図15において、PC100Aの1回目の印刷処理(タイミングT1501)が終了し、PC100Aのプリンタドライバ118がUSBポートを「クローズ」させた状態から説明する(タイミングT1502)。
【0252】
PC100Aでは、プリンタドライバ118がUSBポートを「クローズ」させると、USBフィルタドライバ117がUSBポート「クローズ」をUSB仮想バスドライバ115に通知する。
【0253】
USB仮想バスドライバ115は、USBポート「クローズ」の通知を受けると、セッション接続をすぐに終了させず、規定時間が経過するまでの間はデバイスサーバ200に対してセッション終了要求を送信しない(タイミングT1503)。
【0254】
この規定時間内に、PC100Bの上位層のソフトウェアによって印刷実行命令が発行された場合(タイミングT1504)、PC100Bからデバイスサーバ200に対してセッション開始要求が送られるが、まだ、PC100Aとの間のセッション接続が終了していないため、デバイスサーバ200はPC100Bに対して「NG」応答を返す(タイミングT1505)。
【0255】
一方、この規定時間内に、再度、PC100Aの上位層のソフトウェアから印刷実行命令が発行されると(タイミングT1506)、プリンタドライバ118は、再びUSBポートを「オープン」させる(タイミングT1507)。
【0256】
USBフィルタドライバ117では、USBポートを通過する制御コマンドを検知するが、デバイスサーバ200とは既にセッション接続中であり、セッション開始処理が不要である。従って、PC100Aのプリンタドライバ118がUSBポートを介してデバイスサーバ200に制御コマンドを送信することで、2回目の印刷処理が連続して実行される(タイミングT1508)。
【0257】
PC100Aのプリンタドライバ118は、2回目の印刷処理が終了すると、1回目と同様、USBポートを「クローズ」させるが(タイミングT1509)、USB仮想バスドライバ115では、すぐにセッション接続を終了させず、規定時間が経過するまでデバイスサーバ200に対してセッション終了要求を送信しない(タイミングT1510)。
【0258】
そして、この規定時間内にPC100Aの上位層のソフトウェアから印刷実行命令が発行されないと、USB仮想バスドライバ115は、デバイスサーバ200に対しセッション終了要求を送り、デバイスサーバ200との間のセッション接続を終了する(タイミングT1511)。
【0259】
このように、第4の実施の形態におけるクライアントPCは、USBポートを「クローズ」させた後、すぐにデバイスサーバとのセッション接続を終了させず、セッション終了のタイミングを遅らせることによって、連続印刷処理中に他のクライアントPCに割り込まれることなく、一台のクライアントPCで連続印刷することが可能となる。
【0260】
第4の実施の形態は、USBポート(入出力ポート)の「クローズ」と「オープン」の間隔が短いデバイスや一つの処理(ジョブ)が完了するまでの間に「オープン」、「クローズ」を頻繁に行うデバイスに適している。例えば、スキャナやストレージなどのデバイスがこれに該当する。
【0261】
なお、上述した「規定時間」は、デバイスの種類に応じて設定することも可能である。例えば、スキャナとストレージを共有デバイスとして使用する場合、「規定時間」をそれぞれ異なる値に設定してもよい。
【0262】
なお、本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において適宜変更可能である。
【0263】
上述した実施の形態では、一台のデバイスサーバが一台のプリンタ(デバイス)を管理する構成で説明したが、一台のデバイスサーバに複数のプリンタ(デバイス)を接続する構成としても良い。また、この場合はデバイス毎にセッションを用意し制御することで、別々のデバイスであれば、複数のクライアントPCから同時にアクセスすることが可能となる。
【0264】
また、デバイスサーバとデバイスの接続インターフェースをUSBとした場合の構成で説明したが、これらに限定されず、別の接続インターフェースを使用しても良い。具体的には、IEEE1394に対応するためには、PC100が備えるUSBに関連するデバイスドライバ(USB仮想バスドライバ115、USBプリンタクラスドライバ116、USBフィルタドライバ117、プリンタドライバ118など)とデバイスサーバ200が備えるUSBコマンド層212が、それぞれIEEE1394に関連するデバイスドライバとIEEE1394コマンド層に置き換われば良い。
【0265】
さらにはPC100が複数の異なる接続インターフェース用のドライバ層を持ち、デバイスサーバ200がそれに対応した複数の異なるコマンド層を備えるようにすれば、様々な接続インターフェースを備えたデバイスにも柔軟に対応できる。
【0266】
また、本発明の目的は、上述した実施の形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)が記憶媒体に格納されたプログラムコードを読み出して処理を実行することによっても達成することができる。
【0267】
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコードを記憶したコンピュータで読み取り可能な記憶媒体は本発明を構成することになる。
【0268】
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)等が実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現されるように構成しても良い。
【0269】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、このプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部又は全部を実行し、その処理に応じて上述した実施形態が実現される場合も含んでいる。
【0270】
なお、プログラムコードを供給するため、例えば、フロッピー(登録商標)ディスク、ハードディスク、光磁気ディスク、CDやDVDに代表される光ディスク、磁気テープ、不揮発性のメモリカード、ROM等の記憶媒体を用いることができる。又は、プログラムコードは、ネットワークを介してダウンロードしてもよい。
【図面の簡単な説明】
【0271】
【図1】本発明の実施形態に係るネットワークシステムの概略構成を示すブロック図である。
【図2】図1のPC100A,100Bのハードウェア及びハードウェアの概略構成を示すブロック図である。
【図3】図1のデバイスサーバ200のハードウェア及びソフトウェアの概略構成を示すブロック図である。
【図4】クライアントPCとプリンタ間のデータ通信の大まかな流れの説明図である。
【図5】第1の実施の形態におけるクライアントPCの制御動作のうち、デバイスドライバをロードするまでの制御動作の一例を示すフローチャートである。
【図6】第1の実施の形態におけるクライアントPCの制御動作のうち、プリンタにアクセスして印刷処理が終了するまでの制御動作を示すフローチャートである。
【図7】第1の実施の形態におけるデバイスサーバのセッション接続の制御動作を示すフローチャートである。
【図8】第1の実施の形態における一台のクライアントPCがプリンタにアクセスするときの過程を示したタイミングチャートである。
【図9】第1の実施の形態における複数台のクライアントPCがプリンタにアクセスするときの過程を示したタイミングチャートである。
【図10】第2の実施の形態におけるクライアントPCの制御動作のうち、デバイスドライバをロードするまでの制御動作の一例を示すフローチャートである。
【図11】第2の実施の形態における複数台のクライアントPCがプリンタにアクセスするときの過程を示したタイミングチャートである。
【図12】第3の実施の形態におけるクライアントPCの制御動作のうち、デバイスドライバをロードするまでの制御動作の一例を示すフローチャートである。
【図13】第3の実施の形態における複数台のクライアントPCがプリンタにアクセスするときの過程を示したタイミングチャートである。
【図14】第4の実施の形態として、プリンタにアクセスして印刷処理が終了するまでのクライアントPCの制御動作を示すフローチャートである。
【図15】第4の実施の形態におけるクライアントPCの制御動作により、一台のクライアントPCが連続印刷するときの過程を示したタイミングチャートである。
【図16】従来技術において、ネットワーク上のプリンタにアクセスするとき、クライアントPCのユーティリティを操作してセッション接続を制御するときの動作を示すフローチャートである。
【図17】従来技術において、複数台のクライアントPCがプリンタにアクセスする場合の過程を示すタイミングチャートである。
【符号の説明】
【0272】
100A,100B:クライアントPC
101:CPU
102:入力部
103:表示部
104:メモリ
105:通信部
106:外部記憶部
107:内部バス
110:OS
111:アプリケーションプログラム
112:ネットワークインターフェース層
113:ネットワークプロトコル層
114:常駐サービス
115:USB仮想バスドライバ
116:USBプリンタクラスドライバ
117:USBフィルタドライバ
118:プリンタドライバ
200: デバイスサーバ
201:CPU
202:入力部
203:表示部
204:ROM
205:RAM
206:通信部
207:USBI/F(USBインターフェース)
208:内部バス
210:OS
211:制御プログラム
212:通信層
213:USBコマンド層
300:プリンタ(デバイス)
400:接続ケーブル
500:ネットワーク

【特許請求の範囲】
【請求項1】
ネットワークを介してサーバに接続されたデバイスとの間でデータの入出力を行うクライアントであって、
前記デバイスへの入出力を指示するアプリケーション層と、
前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得手段と、
前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレート手段と、
前記接続シミュレート手段により接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成手段と、
前記アプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成手段と、
当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信手段と、
前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御手段と、
前記入出力ポート制御手段が前記入出力ポートをオープンしたとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示するセッション開始手段と、
前記入出力ポート制御手段が前記入出力ポートをクローズしたとき、前記接続シミュレート手段に対して前記サーバとのセッション終了を指示するセッション終了手段と、
を備えることを特徴とするクライアント。
【請求項2】
前記セッション開始手段は、前記入出力ポート制御手段が前記入出力ポートをオープンし且つ前記制御コマンド送信手段が送信した制御コマンドが当該入出力ポートを通過したとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示すること
を特徴とする請求項1に記載のクライアント。
【請求項3】
前記接続シミュレート手段は、前記セッション終了手段から前記サーバとのセッション終了の指示があると、規定時間が経過した後に当該セッションを終了すること
を特徴とする請求項1に記載のクライアント。
【請求項4】
前記規定時間が経過する前に前記アプリケーション層からの入出力指示があると、前記接続シミュレート手段は前記セッション終了の指示を実行せず、前記入出力ポート制御手段が当該入出力ポートをオープンにして、前記制御コマンド送信手段により当該デバイスに対する制御コマンドの送信を開始すること
を特徴とする請求項3に記載のクライアント。
【請求項5】
前記デバイスの接続情報を当該クライアント内に保持している場合、前記デバイス接続情報取得手段は、前記ネットワークを介して当該デバイスの接続情報を取得せず、
前記接続シミュレート手段は、当該クライアント内に保持しているデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項1に記載のクライアント。
【請求項6】
前記デバイスの接続情報を当該クライアント内に保持していない場合、前記デバイス接続情報取得手段は、前記ネットワークを介して当該デバイスの接続情報を取得し、
前記接続シミュレート手段は、該取得したデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項1に記載のクライアント。
【請求項7】
デバイスと、サーバと、ネットワークを介して前記サーバに接続された前記デバイスとの間でデータの入出力を行うクライアントから構成されるデバイス共有システムにおいて、
前記クライアントは、
前記デバイスへの入出力を指示するアプリケーション層と、
前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得手段と、
前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレート手段と、
前記接続シミュレート手段により接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成手段と、
前記アプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成手段と、
当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信手段と、
前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御手段と、
前記入出力ポート制御手段が前記入出力ポートをオープンしたとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示するセッション開始手段と、
前記入出力ポート制御手段が前記入出力ポートをクローズしたとき、前記接続シミュレート手段に対して前記サーバとのセッション終了を指示するセッション終了手段と、
から構成されることを特徴とするデバイス共有システム。
【請求項8】
前記セッション開始手段は、前記入出力ポート制御手段が前記入出力ポートをオープンし且つ前記制御コマンド送信手段が送信した制御コマンドが当該入出力ポートを通過したとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示すること
を特徴とする請求項7に記載のデバイス共有システム。
【請求項9】
前記接続シミュレート手段は、前記セッション終了手段から前記サーバとのセッション終了の指示があると、規定時間が経過した後に当該セッションを終了すること
を特徴とする請求項7に記載のデバイス共有システム。
【請求項10】
前記規定時間が経過する前に前記アプリケーション層からの入出力指示があると、前記接続シミュレート手段は前記セッション終了の指示を実行せず、前記入出力ポート制御手段が当該入出力ポートをオープンにして、前記制御コマンド送信手段により当該デバイスに対する制御コマンドの送信を開始すること
を特徴とする請求項9に記載のデバイス共有システム。
【請求項11】
前記デバイスの接続情報を当該クライアント内に保持している場合、前記デバイス接続情報取得手段は、前記ネットワークを介して前記デバイスの接続情報を取得せず、
前記接続シミュレート手段は、当該クライアント内に保持しているデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項7に記載のデバイス共有システム。
【請求項12】
前記デバイスの接続情報を当該クライアント内に保持していない場合、前記デバイス接続情報取得手段は、前記ネットワークを介して前記デバイスの接続情報を取得し、
前記接続シミュレート手段は、該取得したデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項7に記載のデバイス共有システム。
【請求項13】
ネットワークを介してサーバに接続されたデバイスをクライアントによって共有するデバイス共有方法であって、
前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得ステップと、
前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレートステップと、
前記接続シミュレートステップにおいて接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成ステップと、
前記デバイスへの入出力を指示するアプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成ステップと、
当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信ステップと、
前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御ステップと、
前記入出力ポート制御ステップにおいて前記入出力ポートがオープンされたとき、前記接続シミュレートステップにおいて前記サーバとのセッション開始を指示させるセッション開始ステップと、
前記入出力ポート制御ステップにおいて前記入出力ポートがクローズされたとき、前記接続シミュレートステップにおいて前記サーバとのセッション終了を指示させるセッション終了ステップと、
を実行することを特徴とするデバイス共有方法。
【請求項14】
前記セッション開始ステップでは、前記入出力ポート制御ステップで入出力ポートがオープンされ且つ前記制御コマンド送信ステップで送信された制御コマンドが当該入出力ポートを通過したとき、前記接続シミュレートステップにおいて前記サーバとのセッション開始を指示させること
を特徴とする請求項13に記載のデバイス共有方法。
【請求項15】
前記接続シミュレートステップでは、前記セッション終了ステップにおいて前記サーバとのセッション終了の指示があると、規定時間が経過した後に当該セッションを終了させること
を特徴とする請求項13に記載のデバイス共有方法。
【請求項16】
前記規定時間が経過する前に前記アプリケーション層からの入出力指示があると、前記接続シミュレートステップでは前記セッション終了の指示を実行せず、前記入出力ポート制御ステップにおいて当該入出力ポートをオープンさせて、前記制御コマンド送信ステップにおいて当該デバイスに対する制御コマンドの送信を開始させること
を特徴とする請求項15に記載のデバイス共有方法。
【請求項17】
前記デバイスの接続情報を当該クライアント内に保持している場合、前記デバイス接続情報取得ステップでは、前記ネットワークを介して当該デバイスの接続情報を取得せず、
前記接続シミュレートステップにおいて、当該クライアント内に保持しているデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項13に記載のデバイス共有方法。
【請求項18】
前記デバイスの接続情報を当該クライアント内に保持していない場合、前記デバイス接続情報取得ステップでは、前記ネットワークを介して当該デバイスの接続情報を取得し、
前記接続シミュレートステップにおいて、該取得したデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項13に記載のデバイス共有方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate