ETH Zürich Distributed Computing Group
 
VORLESUNG
unterlagen

ÜBUNG
aufgabenstellungen
gruppen
einschreibung

KONTAKT
 

Übungen "Vernetzte Systeme"

Hier finden Sie die Aufgabenblätter, sowie allfällige weitere Dateien mit Informationen, Programm-Segmenten o.ä.

Andreas Frei und Patrick Stuedi haben in ihren Übungsstunden mit diesen Beispielen Java erklärt (vielleicht auch für andere interessant?).

Informationen zur Übung 5

Wir haben unseren Instant Messenger Java-Server online gestellt, damit Sie auch lokal bei sich einen eigenen IM-Server zu Test- und Lernzwecken aufsetzen können. Ausserdem steht ein einfacher Echo-Service zur Verfügung. Zum starten geben Sie einfach "java -jar IMServer.jar" bzw. "java -jar echo.jar" ein (und folgen dann den Anweisungen).

Informationen zur Java-Lösung 4

Gabor Cselle hat auf die Bedeutung der Fehlerbehandlung im Java-Code hingewiesen. Hier ist eine kurze Beschreibung, um die Grundlagen besser zu verstehen (ausführlicher kann es z.B. im Java-Tutorial nachgelesen werden).

Um zu signalisieren, dass zur Laufzeit Fehler aufgetreten sind, werden in Java sogenannte "Exceptions" geworfen. Dies kann man selbst ausprobieren, indem man in den eigenen Code "throw new Exception("Fehler!");" schreibt. Wenn die Virtual Machine das Programm ausführt, und eine Exception geworfen wird, passiert folgendes:

(1) Wenn die Stelle, an der die Exception geworfen wurde, durch ein try/catch-Block vom richtigen Typ umgeben ist, wird in den catch-Block gesprungen.
(2) Sonst wird die aktuelle Funktion beendet, und die Exception wird an den Caller "weitergereicht". Dort wie oben auf einen umgebenden try/catch-Block prüfen, wenn nicht vorhanden rekursiv diese Funktion beenden und in Caller springen.
(3) Wenn man beim main() angekommen ist, und die Exception dort noch nicht gefangen wurde, Programm beenden und Fehler auf Konsole ausgeben.

Ein Beispiel:

public void a() {
  try {
    b();
  } catch (IOException e) {
    System.out.println("Fehler aufgetreten: " + e);
  }
}
public void b() throws IOException {
  if (!out.write())
    throw new IOException("Schreibfehler in b");
}

Hier wirft b() eine Exception, die erst in a() gefangen wird. Im Beispiel sieht man auch, dass es verschiedene Arten von Fehlern gibt, z.B. die IOException fuer Fehler bei Lese- und Schreibzugriffen. Jede Funktion muss ausserdem explizit deklarieren, wenn sie Exceptions wirft, die nicht in ihr selbst gefangen werden. Dies geschieht bei b() mit dem "throws IOException".

Die beiden System-Calls, die wir in der Lösung benutzen, werfen auch Exceptions:

  • InetAddress java.net.InetAddress.getByName(String arg) throws UnknownHostException
  • void java.net.DatagramSocket.send(DatagramPacket arg) throws IOException

Deshalb müssen wir die Lösung noch umgeben mit:

try {
	/* ... hier der Code von oben ... */
} catch (UnknownHostException e) {
	System.err.println(e);
} catch (IOException e) {
	System.err.println(e);
}

Informationen zur Übung 6

Die Abgabe dieser Übung ist für den 13. Mai vorgesehen. Da es wegen des Feiertages aber keine Vorbesprechung gibt, können Sie Ihre Lösung auch erst nach dem 13. Mai einreichen und an diesem Tag allfällige Fragen stellen.

Informationen zur Übung 4

(Beachten Sie auch diese allgemeinen Hinweise.)

Eiffel: Steps to start and code the Instant Messenger:

1) Extract the "Skeleton_Eiffel.zip" to some folder.
2) Copy all the files from that folder to "$ISE_EIFFEL\..\MyEiffelProjects\Exercise4" (where $ISE_EIFFEL is the path you installed Eiffel to).
3) Open the ACE file with the Eiffel Studio.
4) Compile the project.

If there is any problem, you probably have to fix the paths in the .ace-file. If it doesn't work at all or you still want to start from scratch, notice this additional information regarding the "EiffelNet" and "Thread" libraries:

- "EiffelNet" and "Thread" libraries are included in EiffelStudio 5.5, so you don't have to download them from the Internet.
- In order to work with these libraries and have access to all networking and thread classes you have to include the "EiffelNet (= net)" and "Thread (= thread)" libraries in your project.

Here are the steps to include these libraries in your project:

1)
   - Create a new Eiffel project (Basic application).
   - After the project is created there is only the "base" library included. Therefore, you have to include the "EiffelNet (net)" and "Thread (thread)" libraries in your project.
2)
   - Click on the "Change project settings" button - in the left-top side of the window => "The project configuration" window will appear on the screen
   - Click on the "Clusters" tab
   - Click the "Add" button => the "Create New Cluster" window will appear on the screan. Type in this window the following:
      a) Name => "net"
      b) Cluster path => "$ISE_EIFFEL\library\net" => browse for the "net" folder in the "Eiffel55" directory where you have installed EiffelStudio5.5
   - Click "OK" => in this moment you have to see that the "net" cluster appears in the clusters list, together with "root_cluster" and "base".
   - Do the same for the "Thread" library. Type in this window the following:
      a) Name => "thread"
      b) Cluster path => "$ISE_EIFFEL\library\thread" => browse for the "thread" folder in the "Eiffel55" directory where you have installed EiffelStudio5.5
   - Click "OK" => in this moment you have to see that the "thread" cluster appears in the clusters list, together with "root_cluster" and "base".
3)
   - In the same window click on the "net" and "thread" clusters => Check if the the "Cluster path" is corect for both libraries.
   - Then click on the "library" radio button => in this way you specify that "NET" and "THREAD" are libraries.
4)
   - In the same "Project configuration" window click on the "Externals" tab.
   - Here you will see the "Object file" tab.
   - Click on the "Browse" button (in the button of the window). Here you have to browse for the "net.lib" and "cw32.lib" files which are located in:
      a) "$ISE_EIFFEL\library\net\spec\bcb\lib\net.lib".
      b) "$ISE_EIFFEL\BCC55\Lib\cw32.lib".
   - Click the "Add" button => in this moment the "net.lib" and "cw32.lib" object files will be included in the "Object file" list
5)
   - Click "OK" => the "Project configuration" window will be closed.
6)
   - Compile de project => click the "Compile" button or "F7".
7)
   - After the compilation is complete, the "EiffelNet (net)" and "Thread (thread)" libraries will be included in your project and you can have access to all the classes from these libraries.

<switch to german>

Bitte beachten Sie auch (IhrE ÜbungsleiterIn hat Sie sicherlich darauf aufmerksam gemacht), dass das "DATAGRAM_PACKET" in Eiffel die Angewohnheit hat, in die ersten vier Bytes eines UDP-Paketes automatisch (die Sie aber auch setzen können) eine "Nummer" (4-Byte INTEGER) zu schreiben. Dies kann umgangen werden, wenn Sie anstelle dessen ein "PACKET" verwenden. Leider funktioniert zumindest nach unserer Erfahrung nur die send-Methode mit einem "PACKET". Die entsprechende receive-Methode verursacht bei uns nicht-behebbare Fehler. Daher müssen Sie beim Empfang eines Paketes die ersten vier Bytes aus der "Nummer" extrahieren und den Rest aus dem eigentlichen Daten-Bereich.
Lassen Sie uns wissen, wenn Sie dieses Problem gelöst haben :-)!

Haben Sie die gekennzeichneten Methoden aus den Klassen "MESSAGE_RECEIVER" und "MESSAGE_SENDER" implementiert, sollten Ihr IM-Client etwa so aussehen:

Sollten Sie weitere Fragen haben, wenden Sie sich bitte an IhreN ÜbungsleiterIn (oder direkt an Angela Nicoara).

Java: Sie können die .java-Dateien aus dem "Skeleton_java.zip" einfach in ein neues eclipse-Projekt importieren. Dort müssen Sie dann in den Klassen "MessageSender" und "MessageReceiver" die gekennzeichneten Methoden implementieren. Haben Sie das erfolgreich getan, sollte Ihr IM-Client etwa so aussehen:

Sollten Sie weitere Fragen haben, wenden Sie sich bitte an IhreN ÜbungsleiterIn.


Aufgabenblätter und Lösungen


Aufgabenblatt Zusätzliche Dateien Lösungsvorschlag
uebung1.pdf    
uebung2.pdf    
uebung3.pdf registration_client.e
RegistrationClient.java 
 
uebung4.pdf Skeleton_java.zip
Skeleton_Eiffel.zip 
 
uebung5.pdf schablone.pdf
TCP_ConnectionStateDiagram.txt 
 
uebung6.pdf    
uebung7.pdf zusatzblatt.pdf   
uebung8.pdf    
uebung9.pdf ex9_skeleton.zip   
uebung10.pdf ex10_skeleton.zip   
uebung11.pdf    
uebung12.pdf ex12_skeleton.zip   

This is part of a spam project. Please do NOT use the following email addresses. They are exclusively used to gather spam!

1@ka-z.net, 2@ka-z.net, 3@ka-z.net, 4@ka-z.net, 5@ka-z.net, 6@ka-z.net, 7@ka-z.net, 8@ka-z.net, 9@ka-z.net, 10@ka-z.net, 21@ka-z.net, 22@ka-z.net, 23@ka-z.net, 24@ka-z.net, 25@ka-z.net, 26@ka-z.net, 27@ka-z.net, 28@ka-z.net, 29@ka-z.net, 30@ka-z.net, 31@ka-z.net, 32@ka-z.net, 33@ka-z.net, 34@ka-z.net, 35@ka-z.net, 36@ka-z.net, 37@ka-z.net, 38@ka-z.net, 39@ka-z.net, 40@ka-z.net, 1000@ka-z.net, 1001@ka-z.net, 1002@ka-z.net, 1003@ka-z.net, 1004@ka-z.net, 1005@ka-z.net, 1006@ka-z.net, 1007@ka-z.net, 1008@ka-z.net, 1009@ka-z.net, 1010@ka-z.net, 1011@ka-z.net, 1012@ka-z.net, 1013@ka-z.net, 1014@ka-z.net, 1015@ka-z.net, 1016@ka-z.net, 1017@ka-z.net, 1018@ka-z.net, 1019@ka-z.net, 1020@ka-z.net, 1021@ka-z.net, 1022@ka-z.net, 1023@ka-z.net, 1024@ka-z.net, 1025@ka-z.net, 1026@ka-z.net, 1027@ka-z.net, 1028@ka-z.net, 1029@ka-z.net, 1030@ka-z.net, 1031@ka-z.net, 1032@ka-z.net, 1033@ka-z.net, 1034@ka-z.net, 1035@ka-z.net, 1036@ka-z.net, 1037@ka-z.net, 1038@ka-z.net, 1039@ka-z.net, 1040@ka-z.net, 1041@ka-z.net, 1042@ka-z.net, 1043@ka-z.net, 1044@ka-z.net, 1045@ka-z.net, 1046@ka-z.net, 1047@ka-z.net, 1048@ka-z.net, 1049@ka-z.net, 1050@ka-z.net, 1051@ka-z.net, 1052@ka-z.net, 1053@ka-z.net, 1054@ka-z.net, 1055@ka-z.net, 1056@ka-z.net, 1057@ka-z.net, 1058@ka-z.net, 1059@ka-z.net, 1060@ka-z.net, 1061@ka-z.net, 1062@ka-z.net, 1063@ka-z.net, 1064@ka-z.net, 1065@ka-z.net, 1066@ka-z.net, 1067@ka-z.net, 1068@ka-z.net, 1069@ka-z.net, 1070@ka-z.net, 1071@ka-z.net, 1072@ka-z.net, 1073@ka-z.net, 1074@ka-z.net, 1075@ka-z.net, 1076@ka-z.net, 1077@ka-z.net, 1078@ka-z.net, 1079@ka-z.net, 1080@ka-z.net, 1081@ka-z.net, 1082@ka-z.net, 1083@ka-z.net, 1084@ka-z.net, 1085@ka-z.net, 1086@ka-z.net, 1087@ka-z.net, 1088@ka-z.net, 1089@ka-z.net, 1090@ka-z.net, 1091@ka-z.net, 1092@ka-z.net, 1093@ka-z.net, 1094@ka-z.net, 1095@ka-z.net, 1096@ka-z.net, 1097@ka-z.net, 1098@ka-z.net, 1099@ka-z.net, kenoa@tik.ee.ethz.ch,



Verantwortlich: Keno Albrecht, Distributed Computing Group SS 2005