Senden und Empfangen von Dateien am Socket
Ich sende Dateien vom Java-Server zum Remote-Android-Client. Ich schreibe die Bytes mit Outputstream. Beim Lesen dieser Bytes versucht die Methode read () weiterhin, die Bytes zu lesen, nachdem der Stream beendet wurde. Wenn ich den Ausgabestream auf der Serverseite schließe, werden Bußgelder für Leseoperationen berechnet. Aber ich muss die Datei erneut auf den gleichen Socket schreiben, damit der Ausgabestream nicht geschlossen werden kann.
HINWEIS: MEIN CODE FUNKTIONIERT GUT, UM EINE DATEI ZU TEILEN
CODE FÜR DAS SCHREIBEN VON DATEIEN
public static void writefile(String IP, String filepath, int port, OutputStream out ) throws IOException {
ByteFileConversion bfc = new ByteFileConversion();
byte[] file = bfc.FileToByteConversion(filepath);
out.write(file, 0, file.length);
out.close(); // i donot want to close this and how can I tell reading side that stream is ended.
System.out.println("WRITTEN");
}
Hier lese ich Datei auf Android:
public Bitmap fileReceived(InputStream is)
{
Bitmap bitmap = null;
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = "a.png";
String imageInSD = baseDir + File.separator + fileName;
// System.out.println(imageInSD);
if (is!= null) {
FileOutputStream fos = null;
OutputStream bos = null;
try {
bos = new FileOutputStream(imageInSD);
byte[] aByte = new byte[1024];
int bytesRead;
int index = 0;
DataInputStream dis = new DataInputStream(is);
while ( (bytesRead = is.read(aByte)) >0 ) {
index = bytesRead +index;
bos.write(aByte, 0, bytesRead);
// index = index+ bytesRead;
System.out.println("Loop"+aByte+ " byte read are "+bytesRead+ "whree index ="+ index);
}
bos.flush();
bos.close();
Log.i("IMSERVICE", "out of loop");
java.io.FileInputStream in = new FileInputStream(imageInSD);
bitmap = BitmapFactory.decodeStream(in);
bitmap = BitmapFactory.decodeFile(imageInSD);
Log.i("IMSERVICE", "saved");
// if (bitmap != null)
// System.out.println("bitmap is "+ bitmap.toString());
} catch (IOException ex) {
// Do exception handling
// Log.i("IMSERVICE", "exception ");
System.out.println("ex");
}
}
return bitmap;
}
Eigentlich möchte ich die Socket-Verbindung zurücksetzen
Danke im Voraus