Pakete gehen verloren
-
Hallo,
ich habe gerade ein Mini-Server-Client-Modell gebaut und wundere mich, warum dies nur für Dateien funktioniert, die einige KB groß sind. Ich wollte alles mit UDP ausprobieren, also DatagramSocket. Dass TCP besser wäre, ist mir klar, aber bitte lasst und darüber hier nicht sprechen
Der Code
Server
import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class Server { public static void main(String args[]) throws IOException { String path = "Desktop/datei.jpg"; BufferedInputStream in = new BufferedInputStream(new FileInputStream(path)); byte data[] = new byte[65507]; DatagramSocket socket = new DatagramSocket(1234); DatagramPacket packet; while(in.read(data) != -1){ packet = new DatagramPacket(data, data.length, InetAddress.getByName("localhost"), 5678); socket.send(packet); } System.out.println("Fertig"); socket.close(); in.close(); } }
Client:
import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.util.ArrayList; public class Client { public static void main(String args[]) throws IOException { DatagramSocket socket = new DatagramSocket(5678); DatagramPacket packet; String path = "Desktop/ergebnis.jpg"; BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(path)); byte data[] = new byte[65507]; ArrayList<Byte> file = new ArrayList<Byte>(); int end = 1935338 ; //Länge der Datei. Zu Testzwecken hier hart einprogrammiert int numOfPackages = 30; for (int i = 0; i < numOfPackages; i++) { packet = new DatagramPacket(data, data.length); socket.receive(packet); for(int j = 0; j < packet.getData().length ; j++) file.add(packet.getData()[j]); System.out.print(i + " "); } System.out.println(file.size()); for(int i = 0; i < end; i++) { out.write(file.get(i)); } out.close(); socket.close(); } }
Auf der Clientseite kommt nur ein Bruchteil der Daten an. Liegt das wirklich an UDP? Immerhin schicke ich an den localhost und weiß nicht, wo da so viele Pakete untergehen können. Das System.out in der Schleife des Clients gibts die Zahlen 0-4 aus, obwohl es 30 Pakete gibt.
Mache ich da einen Fehler oder ist UDP tatsächlich Schuld?