0

ソケットを介して複数の画像を送信する方法について、インターネットで見つけたいくつかの解決策を試しましたが、希望どおりに機能させることができません。私は次の設定をしています:

クライアント:

  1. 画面のスナップショットを取得してキューに入れるスレッド
  2. キューから読み取り、ソケットを介してサーバーに画像を送信する複数のスレッド

サーバ:

  1. 複数の接続を許可し、画像を受信して​​キューに入れるソケットサーバー
  2. キューを読み取り、画像をJPanelに書き込むスレッド

私の問題は、Imがソケットを介して画像を送信するのに苦労していることです。ソケットを開いたままにして、画像をストリーミングするだけです。さまざまな解決策を試しましたが、最初の画像のみが送信されます。あるスレッドから別のスレッドに複数の画像を書き込む方法について誰かがコードを共有できれば、私は非常に感謝しています。

編集

各画像がフラッシュされていないように感じますか?ここで、開いた接続で送信する1つのスレッドを作成します。

while(true)
{
  BufferedImage imageQItem = (BufferedImage) queue.dequeue();
  ImageIO.write(imageQItem,"jpg",out);//out is a dataoutputstream
}

そして、それを読み込みます(私のソケットサーバーは、上記のクライアントの接続用に新しいスレッドを作成します)

while(true)
{
  System.out.println("Reading");
  BufferedImage image = ImageIO.read(in);
  viewer.setBufferedImage(image);
  viewer.repaint();
}

発生するのは、読み取りを印刷し続けることだけです。それぞれのイメージに終止符が打たれていないようです。

4

2 に答える 2

1

各画像をとして送信(および受信)しbyte[]、できれば.jpgなどの画像を圧縮するファイル形式を使用します。flush()画像間のストリームを忘れないでください。また、次の画像を読み取る前に、必ず画像のすべてのバイトを読み取ってください。

于 2013-01-25T20:46:23.163 に答える
0

ネットワーク経由で画像を送信することは非常に困難です。ファイルが非常に大きいため、最初に圧縮せずに送信することは文字通りほとんど不可能です。このリンクを試してみてください。私はあなたのコードをあまり手伝うことができないので、あなたを助けることができるかもしれません。Javaでソケットを介して画像データ型を送信する方法お役に立てば幸いです。

于 2013-01-25T20:31:49.403 に答える