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
58 lines
2.3 KiB
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();
|
|
}
|
|
}
|