# STD;ATD;



## mahadi (28. Okt 2012)

hallo leute !!!!  bei einer Aufgabe wo ich ein  STD bzw ATD emuliern  soll,sollte ich ein string eingeben dann es zu binär umwandeln ,und dann multiplexen :
zb

kanal1 Binär :       01 ------------------------  >    01 
kanal2 Binär :       10 ---------> 110101------->     10
kanal3 Binär :       11 -------------------------- >   11

                    senden                                           empfangen
bei ATD
kanal1 Binär : 01  ------------------------>  01 
kanal2 Binär : 10 --------->111001-------> 10
kanal3 Binär : 11  ------------------------>   11

es hat geklappt mit stringtobinär aber mit der methoden send () und receive() nicht .
 wer könnte  dabei helfen???


----------



## SlaterB (31. Okt 2012)

Thema noch aktuell?
es ist nicht wirklich erkennbar worum es geht, was haben die Kanäle für eine Relevanz,
geht es um grundsätzliche Übertragung mit Sockets,

oder oder oder?


----------



## mahadi (31. Okt 2012)

es geht um ein sychrone zeitmultiplexverfahren zu simulieren
ich muss ein 3 strings eingeben ,dann es zu binär umwandeln.
zb  'a' Binär : 01100001 
     'b' Binär : 01100010 
     'c' Binär : 01100011 
 weil es sychrone ist. muss erst mal die 1 ,dann 0, 1,0,1,1 .......000.beim empfangen wieder die binär codes umwandeln und  als strings ausgeben.

beim asychrone  soll es  jede bit mit ein  header geschickt werden.


----------



## mahadi (31. Okt 2012)

das als ohne client server zu benutzen


----------



## SlaterB (31. Okt 2012)

weiter habe ich nicht den Hauch einer Ahnung, worin eine Frage besteht, was andere beisteuern können/ sollen

bei
> das als ohne client server zu benutzen 
+
> zu simulieren
könnte man vermuten, dass Netzwerk überhaupt keine reale Rolle spielt, 
alles nur innerhalb eines Javaprogramms eben simuliert wird,
richtig?

oder sind doch mehrere Programme, mehrere Rechner beteiligt, Übertragung mit Socket, ServerSocket, also Server + Client?


----------



## mahadi (31. Okt 2012)

ja das alles in einem javaprogramm,kein client- server


----------



## FArt (1. Nov 2012)

Definierer eine Klasse STD-Paket, welches die binären Nutzdaten aufnehmen kann. Diese Pakete haben eine feste Größe.
Zerlege die Nachrichten in einzelne Pakete und "verschicke" sie nacheinander (alle 1. Pakete, alle 2. Pakete usw.).
Du brauchst also beim Sender für jeden Sendekanal eine Queue, in der die Pakete warten. Auf der Empfangsseite nimmst du mit einem Dispatcher die Pakete entgegen und verteilst sie in der festen Reihenfolge an die Empfängerkanäle, die ihre Nachricht wieder zusammenbauen.

ATD ist sogar einfacher. Die ATD-Paketklasse enthält die Nutzdaten und die Empfängerinformation, also z.B. eine ID. jetzt kannst du Pakete verschiedener Größe durcheinander "verschicken". Der Dispatcher verteilt anhand der ID.

Ich würde vorschlagen folgende Klassen zu schreiben: StdPaket, AtdPaket, StdSender, AtdSender, StdEmpfaenger, AtdEmpfaenger, Transportlayer, Transportdata, Client.

Die Simulation kann so ablaufen: Instanziiere n Clients mit ihren Nachrichten. Diese geben nacheinander ihre Nachricht an den Sender ab. Dieser zerlegt die Nachrichten und steckt sie ein Transportdata-Objekt, welches im Layer abgelegt wird. Der Empfänger holt die Transport-Data Objekt ab, bastelt die Nachrichten zusammen und verteilt sie an die registrierten Empfänger.

Diese künstlichen Beispiele sind immer ein wenig seltsam zu durchdenken, aber da muss man in der Anfangszeit durch. Ich nehme an, dass ihr mit Multithreading noch nichts am Hut habt. Also muss dein Sender-Empfänger eben das Zeitverhalten "simulieren", z.B. durch die feste Paketgröße bei STD oder durch zufälliges Verschicken (= zusammensetzen einer Transportnachricht) der einzelnen Pakete/Frames bei ATD.


----------

