unull
Nervensäge
So,
ich bastel mir gerade eine Android App, die im wesentlichen eine Art 'netcat' sein soll. Bisher habe ich einen funktionierenden TCP-Client und einen UDP-Client, welche ich jeweils mit einem 'netcat' auf meiner Workstation durchteste. Ich kann in beiden Clients Textnachrichten and die Gegenstelle senden und auch Binaries (Blobs, Bilder z.B. ueber das Share Menu in Android).
Bei TCP geht das mit Bildern beispielsweise problemlos, d.h. ich starte 'netcat' auf meinem PC z.B. mit 'nc -l -p 6000 > foo.jpg' und nach der Uebertragung kann ich das Bild oeffnen.
Bei UDP bin ich aber auf folgendes Problem gestossen: Sobald das File eine gewisse Groesse hat, kann ich es nicht mehr in ein UDP Datagramm verpacken. Das wird einfach nicht versendet, ohne Exception oder aehnliches. Ich weiss dass es da einen theoretische Maximalgroesse gibt, aber da sollte ich mit 35kb noch weit davon entfernt sein.
Jetzt zerlege ich das Byte-Array in 4096 Byte grosse Bloecke (wie mach sowas netcat?) und versende die sequentiell:
Das Bild kommt damit am anderen Ende an, aber jedoch in der falschen Reihenfolge :/ Damit gibt es dann noch andere Artefakte, wie falschen Farben z.B.
Das muss doch irgendwie zu machen sein, dass die Bloecke korrekt am anderen Ende ankommen?
PS: Mir ist schon klar, dass TCP besser fuer so etwas ist, aber von einem 'netcat' zum anderen kann ich auch problemlos Binaries transferieren. Ausserdem sollte man doch davon ausgehen koennen, dass im lokalen Netz die Daten in der Reihenfolge ankommen, in der sie verschickt werden?
ich bastel mir gerade eine Android App, die im wesentlichen eine Art 'netcat' sein soll. Bisher habe ich einen funktionierenden TCP-Client und einen UDP-Client, welche ich jeweils mit einem 'netcat' auf meiner Workstation durchteste. Ich kann in beiden Clients Textnachrichten and die Gegenstelle senden und auch Binaries (Blobs, Bilder z.B. ueber das Share Menu in Android).
Bei TCP geht das mit Bildern beispielsweise problemlos, d.h. ich starte 'netcat' auf meinem PC z.B. mit 'nc -l -p 6000 > foo.jpg' und nach der Uebertragung kann ich das Bild oeffnen.
Bei UDP bin ich aber auf folgendes Problem gestossen: Sobald das File eine gewisse Groesse hat, kann ich es nicht mehr in ein UDP Datagramm verpacken. Das wird einfach nicht versendet, ohne Exception oder aehnliches. Ich weiss dass es da einen theoretische Maximalgroesse gibt, aber da sollte ich mit 35kb noch weit davon entfernt sein.
Jetzt zerlege ich das Byte-Array in 4096 Byte grosse Bloecke (wie mach sowas netcat?) und versende die sequentiell:
Code:
try {
int num_packets = (int) Math.ceil(data.length/4096.0);
Log.i(TAG, "Sending "+num_packets+" packets");
for(int i = 0; i < num_packets; i++) {
byte[] tmp = new byte[4096];
System.arraycopy(data, i*4096, tmp, 0, (data.length-i*4096)%4096);
DatagramPacket packet = new DatagramPacket(tmp, tmp.length, InetAddress.getByName(host), port);
socket.send(packet);
Log.i(TAG, "Sent! "+i);
}
...
Das Bild kommt damit am anderen Ende an, aber jedoch in der falschen Reihenfolge :/ Damit gibt es dann noch andere Artefakte, wie falschen Farben z.B.
Das muss doch irgendwie zu machen sein, dass die Bloecke korrekt am anderen Ende ankommen?
PS: Mir ist schon klar, dass TCP besser fuer so etwas ist, aber von einem 'netcat' zum anderen kann ich auch problemlos Binaries transferieren. Ausserdem sollte man doch davon ausgehen koennen, dass im lokalen Netz die Daten in der Reihenfolge ankommen, in der sie verschickt werden?