Socket.read() Ende der Dateiübertragung erkennen

Hi

ich schreibe eine App mit der ich Bilder vom Smartphone an meinen PC übertragen möchte.
Wenn der Benutzer ein Foto macht soll es direkt an meinen PC übertragen werden.
Die Verbindung von Smarpthone zum Server ist dauerhaft und erfolgt über Sockets.
Mein Problem ist, dass ich nicht erkenne, wann ein Foto komplett übertragen wurde
und wann die Übertragung eines neuen Fotos beginnt.

InputStream.read() müßte mir eigentlich den Wert -1 liefern sobald eine Datei komplett übertragen wurde
laut Doku, aber wenn ich meinen Code teste, dann wird nie die -1 noch der Wert 0 angezeigt, als Rückgabewert.

PC Seite

while(run)
    		{
    			number++;
    			this.out = new FileOutputStream(new File("C:/Users/me/Desktop/DATAEXCHANGE/mBild" + number + ".jpg"));      
    			byte[] buffer = new byte[16384];
            
    			/*int len = 0;
    			while ((len = in.read(buffer)) > 0)
    			{
    				out.write(buffer, 0, len);
    				System.out.println("WHILE: " + len);
    			}*/
    			
    			int len = 0;
    			while (true)
    			{
    				len = in.read(buffer);
    				System.out.println("WHILE: " + len);
    				out.write(buffer, 0, len);
    				out.flush();
    			}
    			
    			//System.out.println("CLOSE");
    			//this.out.close();
    		}

Smartphone Seite

	public void sendData(String filePath)
	{
		try
		{
			InputStream inputStream = new FileInputStream(new File(filePath));
			byte[] buffer = new byte[16*1024];
			int len = 0;
	        
			while ((len = inputStream.read(buffer)) > 0)
			{
				out.write(buffer, 0, len);
			}
	     
			out.flush();
			inputStream.close();
		}
	    catch (Exception e)
	    {
	        e.printStackTrace();
	    }
	}

Ein InputStream.read liefert dann -1, wenn eine Datei vollständig gelesen wurde bzw. eine Socketverbindung beendet wurde. Wenn du deine gesammte Kommunikation über eine Verbindung laufen lassen willst, musst dich darum kümmern dass der jeweilige Gegenpart erfährt, wenn eine gewisse Aktion beendet ist.

Wenn mein Smartphone ein .jpg Datei überträgt, dann müßte doch aber auf der Serverseite nachdem diese Datei vollständig übertragen wurde -1 als Rückgabewert ausgegeben werden.
Was bei mir aber nicht geschiet.

[QUOTE=BlupBlup]Wenn mein Smartphone ein .jpg Datei überträgt, dann müßte doch aber auf der Serverseite nachdem diese Datei vollständig übertragen wurde -1 als Rückgabewert ausgegeben werden.
Was bei mir aber nicht geschiet.[/QUOTE]

Wenn dein Code da oben noch aktuell ist, dann liegt der Fehler u.U. daran, dass die Senderseite nur den FileInputStream schließt, den OutputStream auf’s Netzwerk aber aber lediglich “flushed” und nicht schließt. Hast du sicher am Übertragungsende ein close()? Und trennst du die Socketverbindung irgendwo? Von alleine schließt sich der Stream jedenfalls nicht.