リモート メソッド呼び出しを使用して、リモート コンピューターからあなたのコンピューターにファイルを取得する方法を教えてください。自分のコンピューター上のファイル パスを指定し、リモート コンピューターから指定されたパスからファイルを取得できるはずです。助けてください
3 に答える
RMI (リモート メソッド呼び出し) は、他のコンピューターに接続するためのものではありません。これは、他の Java アプリケーションに接続するためのものです (ローカルまたはリモート マシンで実行できることは明らかです)。
したがって、RMI 経由でサーバーを呼び出すクライアントの 2 つのアプリケーションを作成できます。サーバーはクライアントの呼び出しを受け取り、ローカル ファイル システムからファイルを読み取り、それをクライアントに転送します。
しかし、IMHO RMI はこのタスクに最適な選択ではありません。おそらくより良い解決策は、ネイティブでサポートされているプロトコルの 1 つを使用してリモート マシンに接続し、ファイルを取得することです。
たとえば、両方のマシンが Windows を実行している場合、パスを使用してファイルを開くことができます\\remote-host\c$\dir1\dir2\file.txt
。
リモート マシンが Unix を実行している場合は、SSH を使用して接続できます。Jschなどの SSH プロトコルの純粋な Java 実装を使用するため、クライアント OS は関係ありません。サーバー側が Windows でクライアント側がそうでない場合は、Windows に SSH サーバーをインストールしてから Jsch を使用するか、クライアント マシンで Samba を使用できます。
どの場合でも FTP を使用できますが、追加の構成が必要になる場合があります。VFSなど、FTP を実装する純粋な Java ライブラリがいくつかあります。
RMI は単なるテクノロジーです。それを行う 1 つの方法は、RMI に発行するサーバー マシンでプロセスを実行することですが、安全性が高すぎるようには見えません...
これらのファイルを FTP または SFTP で公開することは可能ですか? 少なくとも、ファイル交換の標準的な方法になるでしょう。また、ディレクトリ内のファイルを公開する単純な HTTP サーバーを実行することもできます。
このサービスを自分で実装する際の問題の 1 つは、リクエストを受け入れるときに注意する必要があることです。ファイルへのパスをサニタイズする必要があります。これはエラーが発生しやすく、誰かがハッキングする可能性が高くなります。
正確には何をしているのですか?ファイルをバイト配列に読み込み、それをリモート メソッドの戻り値として渡すことができます。ただし、状況に応じて、他の (より簡単な) 方法があります。