Hallo,
zuerst mal meine Problemstellung:
ich möchte über UDP Pakete eine beliebige Datei (im speziellen Fall eine properties Datei) vom Server an den Client senden.
Dazu habe ich einen Server erstellt, der die Datei einliest, in ein Datagramm Packt verpackt und verschickt:
das funktioniert ja ganz problemlos und ich empfange die Datei auch am Client, der dann das Ganze in ein File wieder rausschreibt. Nun habe ich aber das Problem, dass ich nicht weiß wie groß das Datagramm Paket sein wird, welches ich auf der Client Seite empfange. Ich habe jetzt mal die maximale Größe eingestellt für ein UDP-Paket um wirklich alles empfangen zu können.
Das Ergebnis ist, dass ich, auch wenn ich eine kleine Textdatei verschicke (<1 KB), auf der Client-Seite bekomme ich immer eine 64 KB große (maximale UDP-Paket Größe) Datei, aufgefüllt mit Leerzeichen nach dem Text. Das möchte ich natürlich nicht - hier mal mein Client Code:
Nun gibt es für mich 2 Möglichkeiten das Problem zu lösen:
1) mein Favorit: irgendwie herausbekommen wie groß das zu empfangende Datagram Paket wirklich sein wird - nur wie soll das gehen?
2) die gespeicherte Datei am Client "reinigen" - also nochmal öffnen und die am Schluss angehängten Leerzeichen (+zeilen) rausschmeissen!
Bei beiden Lösungen weiß ich leider nicht wie das gehen soll und bin deswegen auf eure Hilfe angewiesen!!!
Vielen Dank für eure Bemühungen!
TwoBeers
zuerst mal meine Problemstellung:
ich möchte über UDP Pakete eine beliebige Datei (im speziellen Fall eine properties Datei) vom Server an den Client senden.
Dazu habe ich einen Server erstellt, der die Datei einliest, in ein Datagramm Packt verpackt und verschickt:
Code:
try {
InetAddress server = InetAddress.getByName(hostname);
DatagramSocket theSocket = new DatagramSocket();
DatagramPacket theOutput;
File fileProp = new File("content.properties");
byte[] buffer = new byte[(int)fileProp.length()];
FileInputStream fis = new FileInputStream(fileProp);
fis.read();
while ( fis.read(buffer) != -1 ) {
theOutput = new DatagramPacket(buffer, buffer.length, server,port);
theSocket.send(theOutput);
}
fis.close();
} catch ...
das funktioniert ja ganz problemlos und ich empfange die Datei auch am Client, der dann das Ganze in ein File wieder rausschreibt. Nun habe ich aber das Problem, dass ich nicht weiß wie groß das Datagramm Paket sein wird, welches ich auf der Client Seite empfange. Ich habe jetzt mal die maximale Größe eingestellt für ein UDP-Paket um wirklich alles empfangen zu können.
Das Ergebnis ist, dass ich, auch wenn ich eine kleine Textdatei verschicke (<1 KB), auf der Client-Seite bekomme ich immer eine 64 KB große (maximale UDP-Paket Größe) Datei, aufgefüllt mit Leerzeichen nach dem Text. Das möchte ich natürlich nicht - hier mal mein Client Code:
Code:
try {
FileOutputStream fos = new FileOutputStream("content_temp.properties");
DatagramSocket theSocket = new DatagramSocket(port);
DatagramPacket theInput = new DatagramPacket(buffer, buffer.length);
theSocket.receive(theInput);
String s = new String(theInput.getData());
fos.write(s.getBytes());
fos.close();
} catch ...
Nun gibt es für mich 2 Möglichkeiten das Problem zu lösen:
1) mein Favorit: irgendwie herausbekommen wie groß das zu empfangende Datagram Paket wirklich sein wird - nur wie soll das gehen?
2) die gespeicherte Datei am Client "reinigen" - also nochmal öffnen und die am Schluss angehängten Leerzeichen (+zeilen) rausschmeissen!
Bei beiden Lösungen weiß ich leider nicht wie das gehen soll und bin deswegen auf eure Hilfe angewiesen!!!
Vielen Dank für eure Bemühungen!
TwoBeers