Variablen von void-Methode in einer anderen Methode übernehmen/ausgeben

AHH ... Jetzt macht es KLICK

Was du versuchst :

Du baust vom Client einen Verbindung zum Server auf.
Der Server bildet darauf hin ein neues Connection-Objekt dem eine this-referenz des Servers *für den Broadcast* und der eben eigegangen Socket übergeben wird.
Danach erzeugst du ein neues Client-Objekt um darauf die Methode getLocalPort() aufzurufen.

DAS GEHT NICHT ... zumindest nich SO

Du kannst vom Server aus nicht die Methode getLocalPort auf dem Client aufrufen ... Davon mal ganz abgesehen das du ein neues , LEERES Objekt erzeugst was sowieso keinen localport haben kann wenn dieser nicht verbunden ist.

Warum wir da nicht gleich drauf gekommen sind : weil uns der Code erst das verraten hat für das du zu unfähig warst dich richtig Auszudürcken.

Wenn du jetzt vom Clienten den localport haben willst musst dein Connction-Objekt dies vom Clienten abfragen und dann verarbeiten. Stichwort : Protokoll

Als Tipp : das jetzt nachträglich in deine Klassen einzubauen ist schwieriger als wenn man diese komplett neu schreiben würde und dabei gleich von vornherein mit einem Protokoll arbeitet.
Und versuche dich nächste mal etwas genau auszudrücken ... weil ein einfaches : Aufruf von Methode X liefert nicht erwartetes Ergebniss reicht nicht. Wenn du auf dem Server ein neues Client-Objekt erzeugst welches natürlich nicht initialisiert wird und dann eine Methode auf ein Objekt anwendest was eigentlich NULL ist *gut .. bei primitiven Datentypen gibt es glaube ich vorkehrungen das dort keine NPE fliegt* ist klar das du auch nur das zurückbekommst. Auch ist es ein großer irrglaube das du so einfach auf eine Methode auf dem Clienten zugrifen könntest. Klar gibt es wunderschöne Lösungen dies zu tun aber das überstiegt dann doch mit sicherheit deine Fähigkeiten und Verständlichkeiten und desshalb werden ich bewusst hier nichts namentlich nennen. Ich bitte auch die anderen sich in diesem Punkt mal ausnahmsweise zu enthalten.

Versuch uns also bitte erstmal eindeutig zu erklären was genau du vorhast. Also welchen Port du nun genau von welchem Objekt haben willst und so weiter. Was du dann damit vorhast ist nicht von belang.
 
AHH ... Jetzt macht es KLICK

Was du versuchst :

Du baust vom Client einen Verbindung zum Server auf.
Der Server bildet darauf hin ein neues Connection-Objekt dem eine this-referenz des Servers *für den Broadcast* und der eben eigegangen Socket übergeben wird.
Danach erzeugst du ein neues Client-Objekt um darauf die Methode getLocalPort() aufzurufen.

DAS GEHT NICHT ... zumindest nich SO

Du kannst vom Server aus nicht die Methode getLocalPort auf dem Client aufrufen ... Davon mal ganz abgesehen das du ein neues , LEERES Objekt erzeugst was sowieso keinen localport haben kann wenn dieser nicht verbunden ist.

Wenn du jetzt vom Clienten den localport haben willst musst dein Connction-Objekt dies vom Clienten abfragen und dann verarbeiten. Stichwort : Protokoll

Alles klar, Danke. Werde mich in der Richtung mal schlau machen :)

Warum wir da nicht gleich drauf gekommen sind : weil uns der Code erst das verraten hat für das du zu unfähig warst dich richtig Auszudürcken.

Sorry, ich wusste nicht wie ich es sonst beschreiben sollte, versuche mich das nächste Mal
besser auszudrücken. :)

Als Tipp : das jetzt nachträglich in deine Klassen einzubauen ist schwieriger als wenn man diese komplett neu schreiben würde und dabei gleich von vornherein mit einem Protokoll arbeitet.
Und versuche dich nächste mal etwas genau auszudrücken ... weil ein einfaches : Aufruf von Methode X liefert nicht erwartetes Ergebniss reicht nicht. Wenn du auf dem Server ein neues Client-Objekt erzeugst welches natürlich nicht initialisiert wird und dann eine Methode auf ein Objekt anwendest was eigentlich NULL ist *gut .. bei primitiven Datentypen gibt es glaube ich vorkehrungen das dort keine NPE fliegt* ist klar das du auch nur das zurückbekommst. Auch ist es ein großer irrglaube das du so einfach auf eine Methode auf dem Clienten zugrifen könntest. Klar gibt es wunderschöne Lösungen dies zu tun aber das überstiegt dann doch mit sicherheit deine Fähigkeiten und Verständlichkeiten und desshalb werden ich bewusst hier nichts namentlich nennen. Ich bitte auch die anderen sich in diesem Punkt mal ausnahmsweise zu enthalten.

Versuch uns also bitte erstmal eindeutig zu erklären was genau du vorhast. Also welchen Port du nun genau von welchem Objekt haben willst und so weiter. Was du dann damit vorhast ist nicht von belang.

Ist in Ordnung, mal schauen ob ich es so umsetzen kann wie Du es dir vorstellst...
 
Naja wie ich es mir vorstelle ... ist etwas falsch ausgedrückt. Ich habe bereits für meine Anwendungen ein sehr einfaches Protokoll mit dem ich aber alle Informationen übertragen kann.
Ich hab dir lediglich deine Design-Mängel anschaulich gemacht. Klar werde ich und bestimmt auch die anderen dir gerne helfen das ganze dann so zum Laufen zu bekommen wie du es möchtest und auch mal eigentlich geplant hast. Aber das ganze Thema Netzwerk ist dann doch etwas komplexer als nur eine Verbindung aufzubauen und darüber Daten zu senden.
 
War etwas falsch formuliert ;)

Betreffenderweise kannst Du mir ein Buch/Bücher/Tutorials für Netzwerkprogrammierung empfehlen?
 
Hmm .. also erlich gesagt habe ich jetzt leider keines parat. Ich arbeite sehr viel mit dem Netzwerk und hatta am Anfang auch solche Probleme die ich mitlerweile gelöst bekommen hab. Wenn du es mir zutraust kann ich auch gerne versuchen dir bei Konkreten Problemen zu helfen. Ob ichs schaffe is natürlich ne andere Frage. Was Literatur angeht müsste man mal vielleicht in den Stickies nachgucken ob dort was hilfreiches zu finden ist.
Aber ich kann dir gleich sagen : es wird vermutlich nicht DAS BUCH geben da sich das Thema Netzwerk doch sehr breit fächert. Wenn mans mal durchgeht stehen wohl an erster Stelle die OSI-Schichten und die dort eingeordneten Protokolle. Dann vermutlich noch komplizierte Strukturen , NAT , routing , was weis ich. Es wird bestimmt zu jedem Thema mehrere Bücher geben. Müssten wir mal unsere Profis wie Thomas fragen ob die da was gutes kennen. Ich selbst kann dir wie gesagt nur versuchen durch meine Erfahrung zu helfen.
 
Naja ... ich wollte es eigentlich vermeiden dir diese drei Buchstaben an den Kopf zu werfen da RMI *Remote Method Invocation* schon einiges Hintergrundwissen erfordert und auch nicht so einfach umzusetzen ist wie ein einfaches String-basiertes Protokoll. Außerdem würden dann sicher einige wieder ankommen nach dem Motto : verwende lieber ein fertiges Framework als so dierekt auf RMI zu arbeiten. Darum würde ich da doch schon mit Command-Strings arbeiten nach dem Motto das der Server den Client mit einem definiertem Command fragt : wie ist dein LocalPort und der Client dann darauf antwortet : mein LocalPort ist XXXX ...
Auch die Frage : auf welcher Seite willst du den LocalPort wissen ? Auf der Serverseite also mit welchem Port der Client am Server läuft oder den Source-Ports des clienten von dem aus er die Verbindung aus aufgebaut hat *die bekommt man nämlich dank TCP auch auf der Serverseite raus*.
 
Zurück