2016-10-05 2 views
1

私はネットワーキングについてもっと学びたいので、ソケットを使って小さなプロジェクトをすることにしました。私はすでに成功している私はかなり基本的であることを知っているエコーサーバーを作成しています。ソケットを使ってデータを送受信する

次のステップは、サーバーからクライアントへ、そしてその逆のすべての種類のファイル(テキストファイル、画像、おそらく動画からでも)を送信することです。私はFIleOutputStream、ObjectOutputStream(と入力を明白に)としようとしていると私もバイトバッファを試みたが、私は本当に多くのデータについて知っていることを理解し始めているJavaのドキュメントを読むことによって....

ので、私の質問は以下のとおりです。

  1. が、私はバイトにデータ(テキスト、画像、動画)のすべての種類を変換することができ、それを送信して、それがために使用されるデータの中にそれをすべてを変換し、または私は特定が必要ですデータの種類ごとに機能?
  2. テキストファイルまたはイメージをObjectに変換してObjectOutputFileで送信できますか?もしそうなら、どうすれば他の側でそれを解凍できますか?私はObjectOutputFile.readObjectを試してみましたが、その後は何をすべきか分かりません。 、これだけ特定の部分が重要であるため、ここで

は、私は(私はすべてのコードを投稿しないでしょうやろうとしていたものだ、私は信じている:

サーバー:(アウトがDataOutputStreamのある)

ObjectOutputStream oos = new ObjectOutputStream(out); 

Path path = Paths.get("stuff/Folder.jpg"); 

byte[] data = Files.readAllBytes(path); 

oos.write(data); 

クライアント(にはDataInputStreamのある):事前にすべてのヘルプのための

ObjectInputStream ois = new ObjectInputStream(in); 

ois.readObject(); 

おかげで、あなたは記事やtutoriaを知っていると思われる場合それは私が助けてくれるこのことについてもっと学ぶのに役立ちます!

+0

'ois.readObject()'は、サーバ上で送信したバイト配列と同じバイト配列を返します。そのため、ファイルに再度書き込む必要があります。 – immibis

答えて

1

すべての種類のデータ(テキスト、画像、動画)をバイトに変換して送信し、以前のデータに変換できますか?

確かに。

また、データの種類ごとに特定の機能が必要ですか?

これは "または"ではありません。いくつかのタイプのデータを自分でバイトに変換する場合は、おそらくそれぞれのタイプごとに別々の関数が必要です。ファイルを送信する場合は、ファイルの内容がで、すでにバイトであるため、変換は必要ありません。

テキストファイルまたはイメージをObjectに変換してObjectOutputFileで送信できますか?

ObjectOutput ストリームで送信できます。

もしそうなら、どうすれば他の側でそれを解凍できますか?

With ObjectInputStream。

私はObjectOutputFile.readObjectを試みたが、私は本当にObjectOutputFile.readObjectなどのJavaには、このような方法はありませんthat.`

後に何をすべきかを知りません。

0
  1. すべてのデータをバイトに変換できることは確かです。しかし、問題はそれを元に戻す方法です。典型的にはBase64エンコーダを使用して画像をエンコードし、クライアントがそれを取得したらBase64デコーダで元に戻すことができます。これを行うには多くの方法があります。 Googleにお知らせください。
  2. はい、オブジェクトデータを使用して送信できます。オブジェクトの新しいクラスを定義し、getterでデータを呼び出す必要があるかもしれません。クライアント側では、Object値をois.readObject()として宣言する必要があります。 Like:

    オブジェクトオブジェクト= ois.readObject();

ちょっとしたアドバイスを追加するだけで、あなたは今ソケットによく慣れていないと感じます。だから、Computer Networking(Kurose Ross)のような教科書が役に立つでしょう。また、CとJavaの間でデータを送信する予定がある場合、Cはネイティブにサポートしていないため、Objectを使用することはできません。

関連する問題