# Bild via Socket übertragen?



## Extremefall (29. Juli 2011)

Hallo,
ich versuche, ein Bild mittels Socketverbindung zu übertragen. Leider kann man die Bilddatei nicht öffnen.  Mein Code:

```
// Server
import java.net.*;
import java.io.*;
 
public class Server {
    public Server(int port) throws Exception {
        ServerSocket socketServer = new ServerSocket(port);
        while (true) {
            Socket client = socketServer.accept();
            InputStream input = client.getInputStream();
            // Changes #start
            FileOutputStream fileOut = new FileOutputStream("c:/image.jpg");
            byte[] buffer = new byte[1024];
            while (client.isConnected()){
            	int bytesRead = input.read(buffer);
            	if (bytesRead ==-1) break;
            	fileOut.write(buffer,0,bytesRead);
            }
            fileOut.close();
            // Changes #end
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(
                    input));
            String userInput;
 
            while ((userInput = stdIn.readLine()) != null) {
                System.out.println("echo: " + userInput);
            }
        }
    }
}
```


```
//Client
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
 public class Client {
    static Socket clientSocket;
    static BufferedReader in = null;

    public static void connectToSoccet(InetAddress IP, int port) {
        try {
            Socket clientSocket = new Socket(IP, port);
            PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(
                    clientSocket.getOutputStream()));
            printWriter.println("Connection established: "+InetAddress.getLocalHost().getHostName());
            printWriter.flush();
            System.out.println(clientSocket.isConnected());
            // Changes #start
            File file = new File("c:/screenshot.jpg");
            OutputStream out = clientSocket.getOutputStream();
            InputStream fileIn = new FileInputStream(file);
            byte[] buffer = new byte[1024];
            while (fileIn.available()>0){
            	out.write(buffer,0,fileIn.read(buffer));
            }
            fileIn.close();
            // Changes #end
            clientSocket.close();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
           e.printStackTrace();
        }
     
    
}
 }
```

Wie kann ich das Problem lösen? Wie übertrage ich Bilder über Sockets?


----------



## Franz Degenhardt (1. August 2011)

Hi, 
läuft alles bestens. Das Problem ist nur, dass der Client als erstes den String "Connection established <hostname>" an den Server schickt. Der Server fängt dies nicht extra ab und schreibt den String an den Anfang der Bilddatei. Diese ist dann ungültig.
Entweder den String gar nicht erst schicken oder ihn im Server rausfiltern.


----------

