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.

55 lines
2.1 KiB

5 years ago
  1. package perf;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStreamWriter;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. class TCPPerfServer {
  9. public static void main(String argv[]) throws Exception {
  10. int tcpPort = 36039;
  11. Long clientNumberOfMegabytes;
  12. ServerSocket serverSocket = new ServerSocket(tcpPort);
  13. System.out.println("TCPPerfServer gestartet. Warte auf eingehende Requests...");
  14. while (true) {
  15. Socket connectionSocket = serverSocket.accept();
  16. BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
  17. BufferedWriter outToClient = new BufferedWriter(new OutputStreamWriter(connectionSocket.getOutputStream()));
  18. char[] buffer = new char[1024];
  19. clientNumberOfMegabytes = new Long(inFromClient.readLine());
  20. if (clientNumberOfMegabytes == 0) {
  21. connectionSocket.close();
  22. break;
  23. }
  24. System.out.println("Request von TCPPerfClient " + connectionSocket.getInetAddress() + ":" + connectionSocket.getPort() + " empfangen. Erzeuge und sende " + clientNumberOfMegabytes + "MB ...");
  25. for (long mb = 0; mb < clientNumberOfMegabytes; mb++) {
  26. long megabyteStartTimeMilli = System.currentTimeMillis();
  27. for (long segment = 1; segment < 1024; segment++) {
  28. long segmentStartTimeNano = System.nanoTime();
  29. outToClient.write(buffer);
  30. if (clientNumberOfMegabytes == 1) {
  31. double transferDurationSegment = System.nanoTime() - segmentStartTimeNano;
  32. //System.out.printf("Dauer pro Segment: %.0f ns, Rate: %.0f KByte/s (MB: %d, Segment: %d)\n", transferDurationSegment, (1024 / (transferDurationSegment / 1000000000)), mb, segment);
  33. // CSV Output Excel
  34. System.out.println(mb + "," + segment + "," + transferDurationSegment);
  35. }
  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. connectionSocket.close();
  42. }
  43. serverSocket.close();
  44. }
  45. }