2016-04-13 23 views
0

Ich habe eine sehr allgemeine Frage. Ich versuche, zwischen zwei Modulen auf den zwei Schichten von OSI zu kommunizieren (angenommen, Transportschicht ist in Klasse A implementiert und Klasse B implementiert Netzwerkschicht). Was ich verstehe, ist, dass Klasse A Klasse B einfach verwenden kann, indem sie ihre Methoden aufruft, um eine Datennutzlast weiter zu den unteren Schichten weiterzuleiten. Daher hat Klasse A das Wissen der Klasse B, aber nicht umgekehrt.Datenübertragung zwischen C++ Modulen

Die Frage ist, wenn Klasse B Daten von den unteren Schichten empfängt, wie werden die Daten an Klasse A (obere Schicht) weitergeleitet, da sie nicht über Klasse A wissen. Wie wird eine solche Funktionalität in C++ implementiert? Was ist das wichtige Thema für diese Art von Aufgabe zu lernen?

+0

Dies ist eine abstrakte Frage. Solche Regeln gibt es in C++ nicht. Bei der Gestaltung einer solchen Anwendung liegt es an Ihnen, alle Regeln vollständig zu definieren und zu implementieren. –

+0

Objekt A konnte Objekt B für Daten abfragen. Oder legen Sie einen * Rückruf * fest, den B aufruft, sobald er Daten empfängt. Oder etwas ganz anderes. Diese Frage kann * viele * Antworten haben und ist zu weit gefasst. –

+0

Ich denke, es hängt auch ziemlich davon ab, welche Hardware Sie haben. Wenn dies ein schnelles System wie ein Mikrocontroller oder DSP ist, müssen Sie möglicherweise OOD für die Geschwindigkeit opfern. Wenn das System etwas langsam ist wie ein PC, dann haben Sie die ganze Zeit auf der Welt. – Lundin

Antwort

0

Einfach durch Schreiben von Setter/Getter-Funktionen in der Netzwerkschichtklasse. Wenn die Transportschichtklasse aktualisiert wird, liest sie die Netzwerkdaten über eine Getter-Funktion.

Es könnte sogar sinnvoll sein, das Netzwerk zu einem privaten Mitglied des Transportes zu machen, da Transport niemals ohne Netzwerk existieren kann.

Beginnen Sie mit der Erstellung aller Klassenabhängigkeiten mit Stift und Papier. Überarbeiten Sie sie ein paar Mal, bis Sie ein Design haben, das am sinnvollsten erscheint.

0

Die Funktionsweise im Kernel besteht darin, dass die Transportschicht einen Rückruf in der Netzwerkschicht registriert. Wenn die Netzwerkschicht ein Datagramm empfängt, das an die Netzwerkschicht gesendet werden muss, ruft sie diese Rückruffunktion auf, wobei sie die Nutzlast des Netzwerkschicht-Datagramms weiterleitet. Das Netzwerkschichtdatagramm weiß, dass es die Nutzlast des Datagramms an ein spezifisches Transportschichtprotokoll übergeben muss, da ein spezifisches Feld das Protokoll der oberen Schicht angibt. Im Falle eines IPv4-Datagramms ist es das Feld Protocol.

Sie können diesen Rückruf in C++ auf unterschiedliche Weise implementieren:

  1. Klasse A-Register der Klasse B für Nachrichten bestimmt zu Protokoll X. Empfang Diese die Observer pattern Verwendung getan werden kann.
  2. Klasse A eine Callback-Methode oder ein lambda in B-Register, für Protokoll X.

Wenn B für eine Datagramm-Protokoll X erhält, benachrichtigt er Beobachter für dieses Protokoll eingetragen oder es ruft den registrierten Rückruf oder Lambda.

Verwandte Themen