Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe gerade in kleines Problem und komme einfach nicht auf die Befehle mit denen es Lösbar ist.
Es geht an sich um eine Server/Client Anwendung jedoch habe ich aktuell eher ein anderes Problem.
Ich besitze nun die Mehtoden send() und recieve(),
jetzt soll dafür gesorgt werden das send() immer vor recieve() aufgerufen wird und falls das nicht der Fall ist, eine Exception geworfen wird.
Natürlich könnte ich eine Klassenvariable erstellen und am Anfang der beiden Methoden einfach eine if-Abfrage setzen, jedoch denke ich, dass dies besser/anders geht.
Etwas mit Synchronized? Jedoch weiß ich nicht mehr wie das genau dann funktionieren soll und komme nicht mehr drauf.
ich verstehe die Frage nicht. Um eine Methode nacheinander aufzurufen, muss man sie aufeinander aufrufen so:
Java:
methode_a();
methode_b();
Du kannst nicht wirklich zwischen client und server syncen oder etwas mit klassenvariablen lösen, da diese komponenten auf zwei vms laufen.
Wenn der client send() macht und der Server recive(), dann sorgt die Socketimplementierung dafür, dass das eine nicht vor dema nderen passiert, da recive() erst dann zündet, wenn man die socket connection acceptet() und anfängt daten zu empfangen.
ja schon klar wie man Methoden nacheinander aufruft.
Ich programmiere den TcpClientSocketHandler,
dieser besitzt eine send() und eine recive Methode.
Jetzt soll in dieser Klasse dafür gesorgt werden, dass diese Methoden nur abwechselnd aufgerufen werden können und das mit der send() Methode begonnen wird.
Falls dies nicht passiert, soll eine Exception geworfen werden.
Jetzt soll in dieser Klasse dafür gesorgt werden, dass diese Methoden nur abwechselnd aufgerufen werden können und das mit der send() Methode begonnen wird.
Falls du dich später unbedingt ab deinem eigenen Code aufregen willst, musst du dir eine Statemachine bauen, die sich merkt ob send aufgerufen wurde oder nicht und mit Exceptions um sich schmeisst.
Wenn das stimmen würde würde wohl auch die Statemachine ausscheiden.
Seltsam - ich hab auch studiert - mehrfach - aber solche Vorgaben hatten wir NIE - wir hatten eine Aufgabe zu erfüllen und die Lösung zu präsentieren.
Eine Statemachine in diesem Fall ist eine booleanvariable die z.B. sendExecuted heisst und durch die Methode send() auf true, durch die Methode receive auf false gesetzt wird. That's it - damit muss man sich nicht auseinandersetzen.
Ja keine Ahnung warum das so gemacht wird. Ist auch die erste Vorlesung in der das so gehandhabt wird.
Haben halt eine riesige Projektvorlage bekommen. In der wir dann nur die einzelnen Methoden etc Implementieren sollen.
Es ist das erste Programm im Bereich von Netzwerken für mich/uns. Dafür finde ich die Aufgabe ganz schön aufwendig, man hätte auch ruhig mit einem kleinen EchoServer/Clint anfangen können den man selber programmieren muss.
Hab das ganze halt jetzt einfach mit einer Klassenvariable gelöst, die das ganze in einer If-Abfrage überprüft.
Was ist eine Klassenvariable genau? Static? Ok, aber nur wenn die Methoden auch static sind, ansonsten würde ich jedem beliebigen Professor widersprechen.
Wenn du dich in deinem ganzen Leben nach Vorlesungen richten willst, wirst du nicht weit kommen. Beginne eigene Kreativität zu entwickeln ;-)
Ich weiss ja nicht, ob du im Moment gerade Zeit dafür hast. Wenn nicht, hilft es vielleicht sonst wem.
Die angedachte Statemachine hat nur zwei Zustände - ich verwende eine boolean Variable welche auch zwei Zustände kennt.
Wie könnte man eine Statemachine bauen die mehr Zustände hat?
Integervariable?
Nachteil:
man kann jeden beliebigen "Blödsinn" setzen. Fehleranfällig in der programmierung - der Compiler kann nicht feststeleln wenn man "Blösdinn" setzt;
Vorteil:
Erweiterungen sind SEHR schnell gemacht.
Enum?
Etwas aufwendiger in der Handhabung, aber schränkt den Wertebereich ein (da bin ich Fan davon! Man kann gar keinen unbekannten State setzen)
Die Planung einer etwas komplexeren Maschine geht nicht mehr ohne Vorarbeit z.B. auf Papier - da lohnt es sich definitv ein State-Event-Diagramm (findest du z.B. im Zusammenhang mit UML) zu zeichnen und sich genau zu überlegen wer wann welchen State setzt.
Es gibt dann noch kompliziertere Implementationen, aber das lassen wir fürs Erste lieber weg.