2012-04-04 6 views
1

私はアプリケーションでコードを書きますが、複数の画像ファイルをクライアントからサーバーに送信します。 クライアントアプリケーションには1つのフレームがあり、サーバーアプリケーションにはサーバーを開始/停止するフレームもあります。Java:ソケットを使用してクライアントからサーバーに複数の画像ファイルを送信

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

コード:

クライアントサイト:

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. サーバ側で

    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) { 
    
        }  
    } 
    

    このコードはスレッドに実行されています第1の画像は、クライアントによって送信されるコピーである。

  2. サーバーアプリケーションを閉じるときにのみ、このImageを見ることができます。

例外がないと私は連続して、他のクラスのsendPhotoToServer方法として、すべての画像ファイルを送信するために呼び出す:

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

あなたが任意の例外を得るのですか?そして 'sendPhotoToServer'をどのように呼びますか? clientClass.sendPhotoToServer(photoSourcePath + "\\" + rowData.get(5) \t \t \t \t \t \t \t \t {(photoSourcePath = nullを!)の場合: –

+0

例外がthere.In他のJavaクラスである私は、このsendPhotoToServeメソッドを呼び出します); \t \t \t \t \t –

+0

何もせずに例外を捕まえるので、本当ですか?そして 'sendPhotoToServer'をループで呼びますか?また、質問を編集して関連コードを追加し、コメントには入れないでください。 –

答えて

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; 
     } 
    } 
} 
+0

実際に私はこれを永遠に止める必要はありません。これは1人のクライアントには当てはまらないからです。あるクライアントが画像を送信してから、他のクライアントも画像を送信して永遠に実行する必要があります。 –

+0

または2または3のイメージクライアントを送信した後、2〜3時間後にさらにイメージを送信したい場合は、いつでもサーバーを起動および停止する必要があります。しかし、サーバーアプリケーションは24時間実行されます。 –

関連する問題