Sebastian Rieger
6 years ago
commit
fdba979a0f
16 changed files with 486 additions and 0 deletions
-
6.classpath
-
1.gitignore
-
17.project
-
BINbuild/Server1.jar
-
BINbuild/Server2.jar
-
BINbuild/TCPPerfServer.jar
-
BINbuild/UDPPerfServer.jar
-
53build/build-server-jars.xml
-
59src/perf/TCPPerfClient.java
-
55src/perf/TCPPerfServer.java
-
70src/perf/UDPPerfClient.java
-
58src/perf/UDPPerfServer.java
-
43src/socket/Client1.java
-
37src/socket/Client2.java
-
42src/socket/Server1.java
-
45src/socket/Server2.java
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<classpath> |
|||
<classpathentry kind="src" path="src"/> |
|||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> |
|||
<classpathentry kind="output" path="bin"/> |
|||
</classpath> |
@ -0,0 +1 @@ |
|||
/bin/ |
@ -0,0 +1,17 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<projectDescription> |
|||
<name>kommunikationsnetze-und-protokolle-bsc-ai-examples</name> |
|||
<comment></comment> |
|||
<projects> |
|||
</projects> |
|||
<buildSpec> |
|||
<buildCommand> |
|||
<name>org.eclipse.jdt.core.javabuilder</name> |
|||
<arguments> |
|||
</arguments> |
|||
</buildCommand> |
|||
</buildSpec> |
|||
<natures> |
|||
<nature>org.eclipse.jdt.core.javanature</nature> |
|||
</natures> |
|||
</projectDescription> |
@ -0,0 +1,53 @@ |
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
|||
<project default="all" name="Create Runnable Jar for Servers in Project KommProt-Examples"> |
|||
<!--this file was created by Eclipse Runnable JAR Export Wizard--> |
|||
<!--ANT 1.7 is required --> |
|||
<!--define folder properties--> |
|||
<property name="dir.buildfile" value=".." /> |
|||
<property name="dir.workspace" value=".." /> |
|||
<property name="dir.jarfile" value="." /> |
|||
|
|||
<target name="all" depends="create_run_jar_server1, create_run_jar_server2, create_run_jar_tcpperfserver, create_run_jar_udpperfserver"> |
|||
</target> |
|||
|
|||
<target name="create_run_jar_server1"> |
|||
<jar destfile="${dir.jarfile}/Server1.jar" filesetmanifest="mergewithoutmain"> |
|||
<manifest> |
|||
<attribute name="Main-Class" value="socket.Server1" /> |
|||
<attribute name="Class-Path" value="." /> |
|||
</manifest> |
|||
<fileset dir="${dir.buildfile}/bin" /> |
|||
</jar> |
|||
</target> |
|||
|
|||
<target name="create_run_jar_server2"> |
|||
<jar destfile="${dir.jarfile}/Server2.jar" filesetmanifest="mergewithoutmain"> |
|||
<manifest> |
|||
<attribute name="Main-Class" value="socket.Server2" /> |
|||
<attribute name="Class-Path" value="." /> |
|||
</manifest> |
|||
<fileset dir="${dir.buildfile}/bin" /> |
|||
</jar> |
|||
</target> |
|||
|
|||
<target name="create_run_jar_tcpperfserver"> |
|||
<jar destfile="${dir.jarfile}/TCPPerfServer.jar" filesetmanifest="mergewithoutmain"> |
|||
<manifest> |
|||
<attribute name="Main-Class" value="perf.TCPPerfServer" /> |
|||
<attribute name="Class-Path" value="." /> |
|||
</manifest> |
|||
<fileset dir="${dir.buildfile}/bin" /> |
|||
</jar> |
|||
</target> |
|||
|
|||
<target name="create_run_jar_udpperfserver"> |
|||
<jar destfile="${dir.jarfile}/UDPPerfServer.jar" filesetmanifest="mergewithoutmain"> |
|||
<manifest> |
|||
<attribute name="Main-Class" value="perf.UDPPerfServer" /> |
|||
<attribute name="Class-Path" value="." /> |
|||
</manifest> |
|||
<fileset dir="${dir.buildfile}/bin" /> |
|||
</jar> |
|||
</target> |
|||
|
|||
</project> |
@ -0,0 +1,59 @@ |
|||
package perf; |
|||
|
|||
import java.io.BufferedReader; |
|||
import java.io.DataOutputStream; |
|||
import java.io.InputStreamReader; |
|||
import java.net.Socket; |
|||
import java.text.DateFormat; |
|||
import java.text.SimpleDateFormat; |
|||
import java.util.Date; |
|||
|
|||
class TCPPerfClient { |
|||
public static void main(String argv[]) throws Exception { |
|||
String hostname = ""; |
|||
int tcpPort = 36039; |
|||
DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); |
|||
|
|||
//System.out.println("Bitte geben Sie die Server-Adresse ein: "); |
|||
//hostname = inFromUser.readLine(); |
|||
hostname = "127.0.0.1"; |
|||
|
|||
while (true ) { |
|||
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); |
|||
System.out.print("Bitte geben Sie die Anzahl zu übertragender Megabytes ein: "); |
|||
Long number = new Long(inFromUser.readLine()); |
|||
//Long number = (long)1; |
|||
|
|||
Socket clientSocket = new Socket(hostname, tcpPort); |
|||
|
|||
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); |
|||
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); |
|||
|
|||
long timestampStart = System.currentTimeMillis(); |
|||
System.out.println("Zeit vor Versand = " + timestampStart + " ms, " + df.format(new Date(timestampStart))); |
|||
outToServer.writeBytes(number.toString() + "\n"); |
|||
|
|||
if (number == 0) { |
|||
break; |
|||
} |
|||
|
|||
char[] buffer = new char[1024 * 1024]; |
|||
long totalBytesReceived = 0; |
|||
int charsRead = inFromServer.read(buffer); |
|||
while (charsRead != -1) |
|||
{ |
|||
totalBytesReceived += charsRead; |
|||
charsRead = inFromServer.read(buffer); |
|||
} |
|||
|
|||
long timestampEnd = System.currentTimeMillis(); |
|||
System.out.println("Zeit nach Empfang = " + timestampEnd + " ms, " + df.format(new Date(timestampEnd))); |
|||
long duration = timestampEnd - timestampStart; |
|||
System.out.println("Delay = " + duration + " ms"); |
|||
double seconds = (duration / 1000.0); |
|||
double throughput = (totalBytesReceived / seconds); |
|||
System.out.println("Rate = " + (long)throughput + " B/s"); |
|||
clientSocket.close(); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,55 @@ |
|||
package perf; |
|||
|
|||
import java.io.BufferedReader; |
|||
import java.io.BufferedWriter; |
|||
import java.io.InputStreamReader; |
|||
import java.io.OutputStreamWriter; |
|||
import java.net.ServerSocket; |
|||
import java.net.Socket; |
|||
|
|||
class TCPPerfServer { |
|||
public static void main(String argv[]) throws Exception { |
|||
int tcpPort = 36039; |
|||
Long clientNumberOfMegabytes; |
|||
|
|||
ServerSocket serverSocket = new ServerSocket(tcpPort); |
|||
|
|||
System.out.println("TCPPerfServer gestartet. Warte auf eingehende Requests..."); |
|||
|
|||
while (true) { |
|||
Socket connectionSocket = serverSocket.accept(); |
|||
|
|||
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); |
|||
BufferedWriter outToClient = new BufferedWriter(new OutputStreamWriter(connectionSocket.getOutputStream())); |
|||
|
|||
char[] buffer = new char[1024]; |
|||
clientNumberOfMegabytes = new Long(inFromClient.readLine()); |
|||
|
|||
if (clientNumberOfMegabytes == 0) { |
|||
connectionSocket.close(); |
|||
break; |
|||
} |
|||
|
|||
System.out.println("Request von TCPPerfClient " + connectionSocket.getInetAddress() + ":" + connectionSocket.getPort() + " empfangen. Erzeuge und sende " + clientNumberOfMegabytes + "MB ..."); |
|||
|
|||
for (long mb = 0; mb < clientNumberOfMegabytes; mb++) { |
|||
long megabyteStartTimeMilli = System.currentTimeMillis(); |
|||
for (long segment = 1; segment < 1024; segment++) { |
|||
long segmentStartTimeNano = System.nanoTime(); |
|||
outToClient.write(buffer); |
|||
if (clientNumberOfMegabytes == 1) { |
|||
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"); |
|||
connectionSocket.close(); |
|||
} |
|||
serverSocket.close(); |
|||
} |
|||
} |
@ -0,0 +1,70 @@ |
|||
package perf; |
|||
|
|||
import java.io.BufferedReader; |
|||
import java.io.InputStreamReader; |
|||
import java.net.DatagramPacket; |
|||
import java.net.DatagramSocket; |
|||
import java.net.InetAddress; |
|||
import java.net.SocketTimeoutException; |
|||
import java.text.DateFormat; |
|||
import java.text.SimpleDateFormat; |
|||
import java.util.Date; |
|||
|
|||
class UDPPerfClient { |
|||
public static void main(String argv[]) throws Exception { |
|||
String hostname = ""; |
|||
int udpPort = 36039; |
|||
DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); |
|||
|
|||
//System.out.println("Bitte geben Sie die Server-Adresse ein: "); |
|||
//hostname = inFromUser.readLine(); |
|||
hostname = "127.0.0.1"; |
|||
InetAddress serverAddress = InetAddress.getByName(hostname); |
|||
|
|||
while (true) { |
|||
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); |
|||
System.out.print("Bitte geben Sie die Anzahl zu übertragender Megabytes ein: "); |
|||
Long numberOfMegabytes = new Long(inFromUser.readLine()); |
|||
//Long number = (long)1; |
|||
|
|||
DatagramSocket clientSocket = new DatagramSocket(); |
|||
clientSocket.setSoTimeout(5000); |
|||
|
|||
long timestampStart = System.currentTimeMillis(); |
|||
System.out.println("Zeit vor Versand = " + timestampStart + " ms, " + df.format(new Date(timestampStart))); |
|||
byte[] outbuffer = (new String(numberOfMegabytes + "\n")).getBytes(); |
|||
DatagramPacket sendPacket = new DatagramPacket(outbuffer, outbuffer.length, serverAddress, udpPort); |
|||
clientSocket.send(sendPacket); |
|||
|
|||
if (numberOfMegabytes == 0) { |
|||
break; |
|||
} |
|||
|
|||
long totalBytesReceived = 0; |
|||
while (true) { |
|||
byte[] receiveData = new byte[1024]; |
|||
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); |
|||
try { |
|||
clientSocket.receive(receivePacket); |
|||
} catch (SocketTimeoutException ste) { |
|||
System.out.println("Timeout"); |
|||
break; |
|||
} |
|||
|
|||
String receivedString = new String(receiveData); |
|||
if (receivedString.contains("done")) { |
|||
System.out.println("Ende der Übermittlung erkannt."); |
|||
break; |
|||
} |
|||
else |
|||
{ |
|||
totalBytesReceived += receivePacket.getLength(); |
|||
System.out.println(totalBytesReceived + " Bytes insgesamt empfangen."); |
|||
} |
|||
|
|||
} |
|||
System.out.printf("Insgesamt %d Bytes von %d (%d MB) empfangen.\n", totalBytesReceived - 4, (1024 * 1024) * numberOfMegabytes, numberOfMegabytes); |
|||
clientSocket.close(); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,58 @@ |
|||
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(); |
|||
} |
|||
} |
@ -0,0 +1,43 @@ |
|||
/* Angelehnt an Kurose/Ross Computernetzwerke (bis 5e Java, ab 6e Python) */ |
|||
|
|||
package socket; |
|||
|
|||
import java.io.*; |
|||
import java.net.*; |
|||
|
|||
class Client1 { |
|||
public static void main(String args[]) throws Exception { |
|||
String hostname = "localhost"; |
|||
int port = 36037; |
|||
|
|||
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); |
|||
DatagramSocket clientSocket = new DatagramSocket(); |
|||
|
|||
InetAddress serverAddress = InetAddress.getByName(hostname); |
|||
byte[] sendData = new byte[1024]; |
|||
byte[] receiveData = new byte[1024]; |
|||
String message; |
|||
String modifiedMessage; |
|||
|
|||
while (true) |
|||
{ |
|||
System.out.print("Nachricht an Server1: "); |
|||
message = inFromUser.readLine(); |
|||
|
|||
sendData = message.getBytes(); |
|||
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, port); |
|||
clientSocket.send(sendPacket); |
|||
|
|||
if (message.equals("exit")) { |
|||
break; |
|||
} |
|||
|
|||
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); |
|||
clientSocket.receive(receivePacket); |
|||
|
|||
modifiedMessage = new String(receivePacket.getData()); |
|||
System.out.println("Antwort von Server1: " + modifiedMessage); |
|||
} |
|||
clientSocket.close(); |
|||
} |
|||
} |
@ -0,0 +1,37 @@ |
|||
/* Angelehnt an Kurose/Ross Computernetzwerke (bis 5e Java, ab 6e Python) */ |
|||
|
|||
package socket; |
|||
|
|||
import java.io.*; |
|||
import java.net.*; |
|||
|
|||
class Client2 { |
|||
public static void main(String argv[]) throws Exception { |
|||
String hostname = "localhost"; |
|||
int port = 36037; |
|||
|
|||
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); |
|||
Socket clientSocket = new Socket(hostname, port); |
|||
|
|||
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); |
|||
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); |
|||
String message; |
|||
String modifiedMessage; |
|||
|
|||
while (true) |
|||
{ |
|||
System.out.print("Nachricht an Server2: "); |
|||
message = inFromUser.readLine(); |
|||
|
|||
outToServer.writeBytes(message + '\n'); |
|||
|
|||
if (message.equals("exit")) { |
|||
break; |
|||
} |
|||
|
|||
modifiedMessage = inFromServer.readLine(); |
|||
System.out.println("Antwort von Server2: " + modifiedMessage); |
|||
} |
|||
clientSocket.close(); |
|||
} |
|||
} |
@ -0,0 +1,42 @@ |
|||
/* Angelehnt an Kurose/Ross Computernetzwerke (bis 5e Java, ab 6e Python) */ |
|||
|
|||
package socket; |
|||
|
|||
import java.net.*; |
|||
|
|||
class Server1 { |
|||
public static void main(String args[]) throws Exception { |
|||
int port = 36037; |
|||
|
|||
DatagramSocket serverSocket = new DatagramSocket(port); |
|||
|
|||
byte[] receiveData = new byte[1024]; |
|||
byte[] sendData = new byte[1024]; |
|||
String message; |
|||
String modifiedMessage; |
|||
|
|||
System.out.println("Server1 gestartet. Warte auf eingehende Requests..."); |
|||
|
|||
while (true) { |
|||
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); |
|||
serverSocket.receive(receivePacket); |
|||
message = new String(receivePacket.getData(), 0, receivePacket.getLength()); |
|||
|
|||
InetAddress clientAddress = receivePacket.getAddress(); |
|||
int clientSrcPort = receivePacket.getPort(); |
|||
|
|||
System.out.println("Request von Client1 " + clientAddress + ":" + clientSrcPort + " empfangen. Erzeuge und sende Antwort..."); |
|||
|
|||
if (message.equals("exit")) |
|||
{ |
|||
break; |
|||
} |
|||
|
|||
modifiedMessage = message.toUpperCase(); |
|||
sendData = modifiedMessage.getBytes(); |
|||
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientSrcPort); |
|||
serverSocket.send(sendPacket); |
|||
} |
|||
serverSocket.close(); |
|||
} |
|||
} |
@ -0,0 +1,45 @@ |
|||
/* Angelehnt an Kurose/Ross Computernetzwerke (bis 5e Java, ab 6e Python) */ |
|||
|
|||
package socket; |
|||
|
|||
import java.io.*; |
|||
import java.net.*; |
|||
|
|||
class Server2 { |
|||
public static void main(String argv[]) throws Exception { |
|||
int port = 36037; |
|||
|
|||
ServerSocket serverSocket = new ServerSocket(port); |
|||
|
|||
String message; |
|||
String modifiedMessage; |
|||
|
|||
System.out.println("Server2 gestartet. Warte auf eingehende Requests..."); |
|||
|
|||
Socket connectionSocket = serverSocket.accept(); |
|||
while (true) { |
|||
|
|||
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); |
|||
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); |
|||
|
|||
// Try/Catch hinzugefügt, nachdem bei Einsatz mit Amazon AWS (Healthcheck des ELB) message null war |
|||
try { |
|||
message = inFromClient.readLine(); |
|||
if (message != null) { |
|||
System.out.println("Request von Client2 " + connectionSocket.getInetAddress() + ":" + connectionSocket.getPort() + " empfangen. Erzeuge und sende Antwort..."); |
|||
|
|||
if (message.equals("exit")) { |
|||
break; |
|||
} |
|||
|
|||
modifiedMessage = message.toUpperCase() + '\n'; |
|||
outToClient.writeBytes(modifiedMessage); |
|||
} |
|||
} catch (IOException ioe) { |
|||
ioe.printStackTrace(); |
|||
} |
|||
} |
|||
connectionSocket.close(); |
|||
serverSocket.close(); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue