Ich habe Probleme beim Schreiben einer Server-Client-Kommunikation, bei der eine Bitmap als Daten übergeben wird.So informieren Sie den Client, dass die Daten fertig sind, ohne den Socket zu schließen
Bei meiner Server-Seite Ich habe
InputStream in = rs.getBinaryStream(1);
ByteArrayOutputStream f2 = new ByteArrayOutputStream();
int c = 0;
while ((c = in.read()) > -1) {
f2.write(c);
}
bytes = f2.toByteArray();
username2.write(bytes, 0, bytes.length);
Und an meinem Android-Client, ich habe
ByteArrayOutputStream out = new ByteArrayOutputStream();
final byte[] buffer = new byte[2048];
int read = -1;
while ((read = receiveimagem.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
Das Problem ist, nur der Kunde versteht, dass das Senden über ist, wenn ich der output schließen auf der Serverseite. Aber die Struktur ist innerhalb einer Schleife und wenn ich den Socket schließe, wird es nicht wieder funktionieren. Wie kann ich dem Kunden mitteilen, dass die Daten abgelaufen sind? Der Code bleibt im Android-Client hängen. Ich weiß, dass ich die Länge senden und überprüfen sollte, aber ich weiß nicht, wie man die Länge benutzt, um das Ende der Datei zu überprüfen.
Das Lesen in einem Anruf löst dieses Problem nicht. Ein Lesevorgang kann nur ein Byte gleichzeitig übertragen. Es ist nicht garantiert, den Puffer zu füllen. – EJP
Ich habe versucht, die ByteArray-Größe durch bytes.length zu erhalten und es an den Client zu senden. Auf der Client-Seite, nach der Größe, wie kann ich diese for-Schleife machen? –
Danke. Wenn Sie lesen, was Sie gesagt haben, könnte ich mit einer Lösung herauskommen. Einfach gemacht für (int i = 0, i <(Länge vom Server bekommen), i ++). Ich danke dir sehr. Auch gemacht endgültiges Byte [] Puffer = neues Byte [1]; so kann ich es einzeln zählen –