2012-04-04 2 views
1

Ich möchte mehr als eine Bilddatei von Client zu Server für diesen senden Ich schreibe den Code in meiner Anwendung, aber es wird nur ein Bild senden. In der Client-Anwendung ist ein Frame vorhanden und in der Server-Anwendung gibt es auch einen Frame zum Starten/Stoppen des Servers.Java: sende mehr als eine Bilddatei von Client zu Server mit Socket

Ein weiteres Problem ist, wenn Client-Anwendung die Bilddatei dann diese Bilddatei auf dem Server-Computer angezeigt, aber wenn ich versuche, diese Bilddatei zu öffnen, dann ist nichts da, aber wenn ich Server-Anwendung schließen (Server-Frame) dann bin ich kann das Bild sehen.

Code:

Client-Seite:

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

    }  
} 

In Serverseite dieser Code in Thread ausgeführt wird:

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

Problem:

  1. einzige 1. Bild kopiert, was vom Client gesendet wird.
  2. Ich kann dieses Bild nur sehen, wenn ich die Serveranwendung schließe.

keine Ausnahme gibt es, und ich rufe sendPhotoToServer Verfahren in anderer Klasse nacheinander als alle die Bilddatei zu senden:

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

Sie alle Ausnahmen erhalten Sie? Und wie nennt man 'sendPhotoToServer'? –

+0

keine Ausnahme there.In andere Java-Klasse Ich nenne diese sendPhotoToServe Methode wie: if (! PhotoSourcePath = null) { \t \t \t \t \t \t \t \t clientClass.sendPhotoToServer (photoSourcePath + "\\" + rowData.get (5)); \t \t \t \t \t \t \t} –

+0

Da Sie Ausnahme ohne etwas zu tun zu fangen, sind Sie sicher? Und nennst du 'sendPhotoToServer' in einer Schleife? Bearbeiten Sie außerdem die Frage, um den entsprechenden Code hinzuzufügen, und fügen Sie ihn nicht in einen Kommentar ein. –

Antwort

0

Ihre Server-Seite sollte den Thread stoppen, wenn seine Arbeit getan ist. Die while-Schleife läuft einfach für immer und hält den Stream offen (deshalb sehen Sie das Bild, wenn Sie den Server herunterfahren, der Thread stoppt nur dann).

Versuchen Sie, die Server-Seite zu diesem Wechsel:

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

eigentlich muss ich diese While-Schleife nicht für immer stoppen. weil dies nicht für einen Kunden ist. Ein Client sendet ein Bild nach dem ein anderer Client auch Bilder senden kann, so dass es für immer laufen muss. –

+0

oder nach dem Senden von 2 oder 3 Bild-Client möchte weitere Bilder nach zwei oder drei Stunden senden dann jedes Mal, wenn ich den Server starten und stoppen muss. Aber Server-Anwendung wird 24 Stunden laufen. –

Verwandte Themen