1

このためにクライアントからサーバーに複数の画像ファイルを送信したいのですが、アプリケーションでコードを記述しますが、送信される画像は1つだけです。クライアントアプリケーションには1つのフレームがあり、サーバーアプリケーションにもサーバーを起動/停止するためのフレームがあります。

もう1つの問題は、クライアントアプリケーションが画像ファイルを送信し、次にこの画像ファイルがサーバーコンピューターに表示される場合ですが、この画像ファイルを開こうとすると何も表示されませんが、サーバーアプリケーション(サーバーフレーム)を閉じると、画像。

コード:

クライアントサイト:

public void sendPhotoToServer(String str){ // str is image location
    try {
        InputStream input = new FileInputStream(str);
        byte[] buffer=new byte[1024];
        int readData;
        while((readData=input.read(buffer))!=-1){
        dos.write(buffer,0,readData); // dos is DataOutputStream
        }
    } catch (FileNotFoundException e) {

    } catch (IOException e) {

    }       
}

サーバー側では、このコードはスレッドで実行されています。

public void run() {
while (true) {
            try {
                byte[] buffer = new byte[8192];
                fis = new FileOutputStream("C:\\"+(s1++)+".jpg"); // fis is FileOutputStream
                while ((count = in.read(buffer)) > 0){ //count is a integer and 'in' is InputStream
                fis.write(buffer, 0, count); 
                fis.flush();    
                }
                } catch (Exception e) {}
}
}

問題:

  1. クライアントから送信されたコピーは最初の画像のみです。
  2. この画像は、サーバーアプリケーションを閉じたときにのみ表示されます。

例外はなく、他のクラスのsendPhotoToServerメソッドを連続して呼び出して、すべての画像ファイルを次のように送信します。

if (photoSourcePath != null) {
                            clientClass.sendPhotoToServer(photoSourcePath+"\\"+rowData.get(5));
                        }
4

1 に答える 1

0

サーバー側は、ジョブが完了したらスレッドを停止する必要があります。ループはwhile永久に実行され続け、ストリームを開いたままにします(そのため、サーバーをシャットダウンするとイメージが表示され、スレッドは停止するだけです)。

サーバー側を次のように変更してみてください。

public void run() {
    boolean processing = true;
    while (processing) {
        try {
            byte[] buffer = new byte[8192];
            fis = new FileOutputStream("C:\\" + (s1++) + ".jpg"); // fis is
                                                                  // FileOutputStream
            while ((count = in.read(buffer)) > 0) { // count is a integer
                                                    // and 'in' is
                                                    // InputStream
                fis.write(buffer, 0, count);
                fis.flush();

            }
            processing = false;
        } catch (Exception e) {
            processing = false;
        }
    }
}
于 2012-04-04T09:59:14.673 に答える