Hallo zusammen,
ich habe folgenden UDP-Clienten:
welcher 10.000.000 UDP-Pakete an folgenden UDP-Server senden soll:
Dabei sollten meiner Erwartung nach in der Datei log.txt 10.000.000 Zeilen vorhanden sein - wobei in jeder Zeile die Nr. des entsprechenden UDP-Paketes steht.
Ich habe mir die Datei log.txt mal angesehen und mir ist dabei aufgefallen, das (scheinbar) bis zur Zeile/Zahl 9.999 alle UDP-Pakete angekommen sind, allerdings bei den größeren Zahlen es zu erheblichen "Verlusten" (?) kommt.
Die Eigenschaften von UDP sind mir schon bewusst. Also das UDP ein verbindungsloses Protokoll ist und eine unsichere Verbindung für Paketverkehr darstellt, da weder die Auslieferung noch deren Reihenfolge garantiert wird.
Jedoch sollte es in meinem privaten Netz oder zumindest bei mir auf der Maschine (habe es auch schon aufm localhost versucht mit gleichen Resultat).
Mir will sich das ganze Verhalten nicht erschließen. Wo ist der Fehler in meiner Denkweise bzw. was kann ich versuchen, damit wirkliche alle Pakete ankommen (außer das ich TCP verwende, was ich ausschließen muss)?
Vielen Dank schon mal für Eure Hilfe!
Beste Grüße,
duddits
ich habe folgenden UDP-Clienten:
Java:
import java.net.*;
class UDPClient
{
public static void (String[] args) throws Exception{
InetAddress IPAddress = InetAddress.getByName("192.168.0.2");
DatagramSocket clientSocket = new DatagramSocket();
for(int i =1; i <= 10000000; i++){
DatagramPacket sendPacket = new DatagramPacket(Integer.toString(i).getBytes("utf-8"), Integer.toString(i).getBytes().length, IPAddress, 9000);
clientSocket.send(sendPacket);
}
clientSocket.close();
}
}
welcher 10.000.000 UDP-Pakete an folgenden UDP-Server senden soll:
Java:
import java.io.*;
import java.net.*;
class UDPServer
{
public static void main(String[] args) throws Exception{
DatagramSocket serverSocket = new DatagramSocket(9000);
byte[] receiveData = new byte[72];
File f = new File("log.txt");
while(true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String rcvd = new String(receivePacket.getData(),"utf-8");
rcvd = rcvd.trim();
try {
FileWriter fw = new FileWriter(f,true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(rcvd+"\n");
bw.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
Dabei sollten meiner Erwartung nach in der Datei log.txt 10.000.000 Zeilen vorhanden sein - wobei in jeder Zeile die Nr. des entsprechenden UDP-Paketes steht.
Ich habe mir die Datei log.txt mal angesehen und mir ist dabei aufgefallen, das (scheinbar) bis zur Zeile/Zahl 9.999 alle UDP-Pakete angekommen sind, allerdings bei den größeren Zahlen es zu erheblichen "Verlusten" (?) kommt.
Die Eigenschaften von UDP sind mir schon bewusst. Also das UDP ein verbindungsloses Protokoll ist und eine unsichere Verbindung für Paketverkehr darstellt, da weder die Auslieferung noch deren Reihenfolge garantiert wird.
Jedoch sollte es in meinem privaten Netz oder zumindest bei mir auf der Maschine (habe es auch schon aufm localhost versucht mit gleichen Resultat).
Mir will sich das ganze Verhalten nicht erschließen. Wo ist der Fehler in meiner Denkweise bzw. was kann ich versuchen, damit wirkliche alle Pakete ankommen (außer das ich TCP verwende, was ich ausschließen muss)?
Vielen Dank schon mal für Eure Hilfe!
Beste Grüße,
duddits