# Klausuraufgabe Netzwerkprogrammierung !



## duuugle (7. Jul 2007)

Die vordefinierte Klasse EventSource hat eine Methode
int waitForNextEvent()
pie Methode wartet auf das nächste Ereignis und kehrt zurück, sobald es eingetreten ist.
Der Rückgabewert ist eine Zahl zwischen 0 und 255. Ereignisse treten in unbestimmten Zeitabständen ein.

```
import java.util.*; 
class EventSource { 
int waitForEvent() Random r = newRandom(); 
try 
Thread.sleep(r.nextlnt(lOOO)) ; 
catch (Exception e) {} return r.nextlnt(255);
```

Das Programm Main wird mit einem Rechnernamen als Kommandozeilenargument (z.b. java Main localhost) aufgerufen. Es startet zwei Threads, einen Recei veThread und einen ResponseThread. 

```
class Main 
public static void main(String ... args) { SendThread send = new SendThread(args); send. starL() ; 
 

 
ReceiveThread receive 
receive.start() ; 
 

new ReceiveThread();
```

Der ReceiveThread lauscht auf Nachrichten vom SendThread von einem anderen host und gibt die Zahl aus,
die er erhalten hat. 
Hinweis: Die Methode getlnetAddress der Klasse Socket liefert den Remote¬Host, mit dem dieser Socket verbunden ist.
Der SendThread erzeugt ein Objekt EventSource und wartet in einer Endlosschleife auf Ereignisse.
Immer wenn ein Ereignis eintritt, gibt er eine Meldung mit dem Ereignis (hier einer Zahl) aus.
Dann öffnet er eine Netzwerkverbindung zu dem im Argument gelieferten Rechner und teilt diesem das Ereignis mit


Kann mir jemand helfen, wie ich das löse. Weis nicht ganz wie ich das machen soll.

Ist ne alte Klausuraufgabe und *am Mittwoch ist Klausur*


----------



## duuugle (8. Jul 2007)

```
import java.net.*;
import java.io.*;

public class SendThread extends Thread{
   public void run() {
      int back;
      EventSource ev = new EventSource();
      back = ev.waitForEvent();
      while(true){
       try{   
         Socket socket = new Socket("localhost",1234);
         PrintWriter to = new PrintWriter(new OutputStreamWriter(socket.getOutputStream() ));
          to.println(back);
         to.flush();
       }catch(IOException e) {}   
      }
   }
}

import java.io.*;
import java.util.*;
import java.net.*;
public class ReceivedThread extends Thread{//implements Runnable{
public void run(){
      

    try{   
      ServerSocket server = new ServerSocket(1234);
      while(true) {
         Socket socket = server.accept();
         // lesen was kommt
         BufferedReader from = new BufferedReader(new InputStreamReader (socket.getInputStream() ));
         String line;
         String geschickt = null;
         for(line = from.readLine(); line != null; line = from.readLine()){
            System.out.println("geschickt  "+geschickt);
            //geschickt = line;
         }
         System.out.println("geschickt:  "+geschickt);
}
 }catch(IOException e) {}   
import java.util.*;

public class Main {

   public static void main (String args) {
      
      Thread send = new SendThread(); // das hab ich abgeändert, da ich sonst nicht weis was ich da machen soll.
      send.start();
      
      Thread receive = new ReceivedThread();
      receive.start();
      
   }
}
import java.util.*;

public class EventSource {

   int waitForEvent() {
      Random r = new Random ();
      try{
         Thread.sleep(r.nextInt(1000) );
      }
      catch(Exception e) {}
      return r.nextInt(255);
   }
}
```

So hab ich das mal gemacht, aber er spuckt mir da nichts aus. Findet da einer den Fehler. Bin noch am durchdrehen.


----------



## SlaterB (9. Jul 2007)

was ist denn deine Vorgehensweise?

hast du überhaupt jemals ein funktionierendes Beispiel für Server/ Client
a) gesehen, b) ausprobiert und/ oder c) selbst programmiert?

du kannst doch nicht ohne Kenntnis etwas programmieren,
ein Matheschüler berechet das Integral von einer Funktion doch auch nicht zum ersten Mal in der Klausur..,

und wenn du das doch schon kannst, dann poste mal ein funktionierendes Beispiel,
vielleicht kann man das dann Schritt für Schritt dahinbiegen


----------

