You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
2.3 KiB

5 years ago
  1. package perf;
  2. import java.io.BufferedReader;
  3. import java.io.ByteArrayInputStream;
  4. import java.io.InputStreamReader;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7. import java.net.InetAddress;
  8. class UDPPerfServer {
  9. public static void main(String argv[]) throws Exception {
  10. int udpPort = 36039;
  11. Long clientNumberOfMegabytes;
  12. DatagramSocket datagramSocket = new DatagramSocket(udpPort);
  13. byte[] receiveData = new byte[1024];
  14. byte[] sendData = new byte[1024];
  15. System.out.println("UDPPerfServer gestartet. Warte auf eingehende Requests...");
  16. while (true) {
  17. DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
  18. datagramSocket.receive(receivePacket);
  19. InetAddress clientAddress = receivePacket.getAddress();
  20. int clientSrcPort = receivePacket.getPort();
  21. BufferedReader inFromClient = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(receivePacket.getData())));
  22. clientNumberOfMegabytes = new Long(inFromClient.readLine());
  23. if (clientNumberOfMegabytes == 0) {
  24. break;
  25. }
  26. for (long mb = 0; mb < clientNumberOfMegabytes; mb++) {
  27. long megabyteStartTimeMilli = System.currentTimeMillis();
  28. for (long segment = 1; segment < 1024; segment++) {
  29. //long segmentStartTimeNano = System.nanoTime();
  30. DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientSrcPort);
  31. datagramSocket.send(sendPacket);
  32. //double transferDurationSegment = System.nanoTime() - segmentStartTimeNano;
  33. //System.out.printf("Dauer pro Segment: %.0f ns, Rate: %.0f KByte/s (MB: %d, Segment: %d)\n", transferDurationSegment, (1024 / (transferDurationSegment / 1000000000)), mb, segment);
  34. // CSV Output Excel
  35. //System.out.println(mb + "," + segment + "," + transferDurationSegment);
  36. }
  37. double transferDurationMB = System.currentTimeMillis() - megabyteStartTimeMilli;
  38. System.out.printf("1 MB (genauer MiB) gesendet in: %.0f ms, Rate: %.0f Bytes/s (MB: %d)\n", transferDurationMB, ((1024 * 1024) / (transferDurationMB / 1000)), mb);
  39. }
  40. System.out.print("\n");
  41. byte[] finishLabel = (new String("done")).getBytes();
  42. DatagramPacket sendPacket = new DatagramPacket(finishLabel, finishLabel.length, clientAddress, clientSrcPort);
  43. datagramSocket.send(sendPacket);
  44. }
  45. datagramSocket.close();
  46. }
  47. }