package perf; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; class UDPPerfServer { public static void main(String argv[]) throws Exception { int udpPort = 36039; Long clientNumberOfMegabytes; DatagramSocket datagramSocket = new DatagramSocket(udpPort); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; System.out.println("UDPPerfServer gestartet. Warte auf eingehende Requests..."); while (true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); datagramSocket.receive(receivePacket); InetAddress clientAddress = receivePacket.getAddress(); int clientSrcPort = receivePacket.getPort(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(receivePacket.getData()))); clientNumberOfMegabytes = new Long(inFromClient.readLine()); if (clientNumberOfMegabytes == 0) { break; } for (long mb = 0; mb < clientNumberOfMegabytes; mb++) { long megabyteStartTimeMilli = System.currentTimeMillis(); for (long segment = 1; segment < 1024; segment++) { //long segmentStartTimeNano = System.nanoTime(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientSrcPort); datagramSocket.send(sendPacket); //double transferDurationSegment = System.nanoTime() - segmentStartTimeNano; //System.out.printf("Dauer pro Segment: %.0f ns, Rate: %.0f KByte/s (MB: %d, Segment: %d)\n", transferDurationSegment, (1024 / (transferDurationSegment / 1000000000)), mb, segment); // CSV Output Excel //System.out.println(mb + "," + segment + "," + transferDurationSegment); } double transferDurationMB = System.currentTimeMillis() - megabyteStartTimeMilli; System.out.printf("1 MB (genauer MiB) gesendet in: %.0f ms, Rate: %.0f Bytes/s (MB: %d)\n", transferDurationMB, ((1024 * 1024) / (transferDurationMB / 1000)), mb); } System.out.print("\n"); byte[] finishLabel = (new String("done")).getBytes(); DatagramPacket sendPacket = new DatagramPacket(finishLabel, finishLabel.length, clientAddress, clientSrcPort); datagramSocket.send(sendPacket); } datagramSocket.close(); } }