# java.awt.image.BufferedImage über Socket schicken



## Nikke (2. Feb 2006)

Hallo Zusammen! 

Irgendwie bekomme ich es nicht hin ein Bild über eine Socketverbindung zu schicken. 

Eigentlich möchte ich auch 3 Bilder hinter einander schicken ohne zwischendurch den Socket schließen zu müssen. 


Bisher hab ich das so gemacht: 

```
public void senImg (java.awt.image.BufferedImage img){
     ImageIO.write(img,"jpg",socket.getOutputSteam());

}
```

Empfänger:

```
try{

   while((img = ImageIO.read(mySocket.getInputStream()))!=null){
           
                System.out.println("Habe gerade ein Daten empfangen");
                myControl.setIcon(new javax.swing.ImageIcon(img));
           
                
   }


}catch(Exception e){}
```



Das ganze funktioniert auch, aber nur, wenn ich nach dem Senden den Socket schließe.
Da ich allerdings drei Bilder recht fix hinter einander senden möchte dauert es einfach zu lange ständig ne neue Verbindung aufzubauen.

Gibt es vllt. irgend eine andere Möglichkeit sowas zu machen? Hab es auch schon mit nem ObjectStream probiert, allerdings war da das problem, dass ich das BufferedImage nicht serialisieren konnte. Ist ja auch eigentlich gar nicht nötig oder? Muss doch auch irgendwie mit nem BufferedStream gehen, oder??!?!?! 

Über jeden Tipp bin ich dankbar!! 

Grüße,
Nikke


----------



## thE_29 (2. Feb 2006)

Woher, soll dein ImageIO wissen wann eines dieser Bilder aufhört??

Du müsstest also den Stream einlesen, bis ein gewisses Zeichen oder Zeichenfolge kommt!

Dann weißt du, aha 1 Bild ist fertig und das holst du dir dann mit ImageIO.read

Dann weiter usw..


Aber zZ speicherst du alle 3 Bilder aufeinmal ab und das kann net gehn ^^


----------



## Nikke (2. Feb 2006)

ok, das macht irgendwie Sinn, sowei ich dachte da ich ehe schon ImageIO-Funktionen benutze würder der das vielleicht wissen aber ok. 

Wie bringe ich denn dann Trennzeichen in den Stream ein? Ich hab bisher leider keine andere Idee das Bild zu verschicken als so.... 

Bin da gerade etwas Ratlos!!


----------



## Bleiglanz (2. Feb 2006)

nimm drei ByteArrayOutputStream

mach dreimal ImageIO.write()

mach dir dann eine List<byte[]>

add die 3 byte Arrays aus dem OutputStream zur List

serialisier diese und schick sie übers kabel (ObjectStream)

zum Einlesen dann umgekehrt


----------

