Server - Client Nachrichtenaustausch über Eventbus

Adriano10

Bekanntes Mitglied
Wenn Client postet, kommt auf den Server leider nicht. Was mache ich hier falsch?

Java:
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
    private ServerSocket serverSocket;
    private Personal person;
    private EventBus eventBus;

    public Server(ServerSocket serverSocket) {
        this.serverSocket = serverSocket;
        this.eventBus = new EventBus();
        this.eventBus.register(this);
    }

    public void serverStarted() {
        try {
            Socket socket = serverSocket.accept();
            System.out.println("New Client has connected");

            if (socket.isConnected()) {
                System.out.println("Connected....");
            }
 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Subscribe
    public void print(Personal p) {
        this.person = p;

    }


    public String toString() {
        return this.person.getName();
    }

    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(4444);
            Server server = new Server(serverSocket);
            server.serverStarted();
            System.out.println(server.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

public class Client {
    private EventBus bus;
    public static Personal person;

    public Client(Socket socket) {
        try {
            this.bus = new EventBus();
            this.bus.register(this);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void sendMessage(Personal personal) {
        bus.post(personal);
    }

    public static void main(String[] main) {
        try {
            Socket socket = new Socket("Localhost", 4444);
            Client client = new Client(socket);
            client.sendMessage(new Personal("Test", 19, "Student"));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Also bei Hostnamen sollte die Gross-/Kleinschreibung auch uninteressant sein. Aber warum müssen wir hier raten? Wieso gibt es keine konkreten Aussagen, was genau passiert?

Aber die Logik stimmt überhaupt nicht. Der EventBus dient der Kommunikation zwischen Komponenten einer Applikation. Nicht um zwischen zwei Applikationen zu kommunizieren.

Du hast einen Server, der einen EventBus hat. Und der Client hat auch einen EventBus (der aber natürlich nichts mit dem EventBus des Servers zu tun hat.)

Dein Client verbindet sich zwar auch mit dem Server (Ich vermute, dass Du die Ausgaben, die Du da teilweise machst, bekommst. Aber da es keine vernünftige Beschreibung gibt und ich keine Lust habe, das alles nachzustellen ist das nur eine Vermutung!) aber mit der Verbindung machst Du nichts.

Wie die Nutzung eines EventBusses aussehen könnte in z.B. einem Chat Server zeigt http://insightfullogic.com/2011/Oct/10/eventbus/

Da hast Du halt einen Server, der in einem Thread auf Clients hört. Jeder Client bekommt einen eigenen Thread, der beim EventBus registriert wird. Wenn dann etwas vom Client kommt, dann wird es an den EventBus gegeben. Und alles, was vom EventBus kommt, wird an die Sockets des Clients gegeben.

Eventbus verbindet also in einer Applikation die Komponenten, ohne dass diese Komponenten sich kennen müssen.
 

Jw456

Top Contributor
Hallo

Ich glaube das ist wider das altbekannte Problem von Anfängern die nicht verstehen. Das Server und Clint zwei getrennte Programme sind die auch auf unterschiedlichen Rechnen laufen könnten.

Das es zwei Programme sind siehst du ja schon daran das du zwei “main“ Methoden sind.

Jede Klasse ist für sich die eine weis von der anderen nichts.

Wenn du das auf einen Rechner simulierst laufen beide Programme in unterschiedlichen Betriebssystem Tasks. Kennen sich nicht. Nur das Netzerk ist die Verbindung.
 

Adriano10

Bekanntes Mitglied
Also bei Hostnamen sollte die Gross-/Kleinschreibung auch uninteressant sein. Aber warum müssen wir hier raten? Wieso gibt es keine konkreten Aussagen, was genau passiert?

Aber die Logik stimmt überhaupt nicht. Der EventBus dient der Kommunikation zwischen Komponenten einer Applikation. Nicht um zwischen zwei Applikationen zu kommunizieren.

Du hast einen Server, der einen EventBus hat. Und der Client hat auch einen EventBus (der aber natürlich nichts mit dem EventBus des Servers zu tun hat.)

Dein Client verbindet sich zwar auch mit dem Server (Ich vermute, dass Du die Ausgaben, die Du da teilweise machst, bekommst. Aber da es keine vernünftige Beschreibung gibt und ich keine Lust habe, das alles nachzustellen ist das nur eine Vermutung!) aber mit der Verbindung machst Du nichts.

Wie die Nutzung eines EventBusses aussehen könnte in z.B. einem Chat Server zeigt http://insightfullogic.com/2011/Oct/10/eventbus/

Da hast Du halt einen Server, der in einem Thread auf Clients hört. Jeder Client bekommt einen eigenen Thread, der beim EventBus registriert wird. Wenn dann etwas vom Client kommt, dann wird es an den EventBus gegeben. Und alles, was vom EventBus kommt, wird an die Sockets des Clients gegeben.

Eventbus verbindet also in einer Applikation die Komponenten, ohne dass diese Komponenten sich kennen müssen.
Danke für die Rückmeldung..

Ich wollte folgendes machen. Beim Anmelden wird die Benutzerdaten zum Server geschickt. Auf dem Server wird die Daten geprüft und bekommt der Client dann die Antwort.

Wenn die Daten korrekt sind, ist er angemeldet sonst nicht…

Ich möchte dieses Nachrichtenaustausch über EventBus durchführen. google.common.Eventbus hat bei mir Interesse erweckt und möchte bisschen Erfahrung machen.

Ich gucke mir auch den Link, den Sie gepostet haben.

Vielen Dank noch Mal
 

Jw456

Top Contributor
Du schickst nicht über das Netzwerk dein Cleint Socket was du erstellt hast benutzt du garnicht.
Du hast ja nicht mal einen In oder Output Stream.
Ich möchte dieses Nachrichtenaustausch über EventBus durchführen. google.common.Eventbus hat bei mir Interesse erweckt und möchte bisschen Erfahrung machen.

die Kommunikation muss ja über das Netzwerk laufen also braucht der Event Bus zumindest das Socket. Der dann auch die Streams benutzt.
 

Adriano10

Bekanntes Mitglied
Du schickst nicht über das Netzwerk dein Cleint Socket was du erstellt hast benutzt du garnicht.
Du hast ja nicht mal einen In oder Output Stream.


die Kommunikation muss ja über das Netzwerk laufen also braucht der Event Bus zumindest das Socket. Der dann auch die Streams benutzt.
Danke, ich dachte so was brauchte ich wegen EventBus nicht. Ich war davon ausgegangen, wenn Client und Server miteinander verbunden sind, dann die über eventBus gesendete Nachricht, gelangte den Server an. Also durch die Annotation @Subscribe könnte auf dem Server die Nachricht abgefangen werden
 

LimDul

Top Contributor
Dafür müssten EventBus auf dem Client und Server miteinander verbunden sein. Warum sollten sie das sein? Du erzeugst einen EventBus im Client und einen im Server. Das sind zwei komplett getrennte Objekte.

Um darüber auszutauschen, müsstest du sie miteinander verbinden über eine Netzwerk-Verbindung. Und wenn man mal die Beschreibung zu Eventbus liest:

It is not a general-purpose publish-subscribe system, nor is it intended for interprocess communication.

Genau dafür, wofür du es einsetzen willst, ist es explizit nicht gedacht.
 

KonradN

Super-Moderator
Mitarbeiter
Der EventBus in Guava ist erst einmal nur ein Tool, um in einer Applikation Komponenten voneinander zu trennen. Also ganz wichtig:
  • 1 Applikation!
  • mehrere Komponenten in der Applikation, die sich nicht kennen sollen.

Das ist also sowas wie: Du hast einen Monolithen aber intern hast Du mehrere Komponenten, die schon einmal getrennt sind.

Das gibt es natürlich auch noch in größer. Das nennt sich dann Enterprise Service Bus. Da gibt es auch mehrere Libraries / Lösungen zu. Da hast Du unter dem Stricht auch wieder den Aufbau wie vorher nur jetzt läuft es nicht mehr in einer Applikation, sondern mehrere Applikationen kommunizieren und das auch über das Netz,

Eine mögliche Library ist dann z.B. von Apache: https://servicemix.apache.org/
Und wenn Du Dir die Seite ansiehst, dann wird auch schnell klar, was da dann direkt für eine Komplexität entstanden ist intern:
  • Message Queuing kommt da rein - hier mit ActiveMQ
  • Apache Camel kommt rein für diverse Dinge um die Steuerung intern zu beeinflussen (um es mal ganz grob zu beschreiben - Link folgen und ansehen!)
  • Persistency ist wichtig - JPA kommt da ins Spiel
  • Ggf. willst Du Transaktionen haben? Distributed Transactions (XA Transactions) sind doch was feines ... Das, was die Entwickler bei Microservices scheuen wie der Teufel das Weihwasser will doch kein Masochist Links liegen lassen :)

Das wäre also evtl. das, was Dich interessieren könnte. Neben Apache gibt es da natürlich auch noch andere Libraries, die sowas machen....
 

Adriano10

Bekanntes Mitglied
Der EventBus in Guava ist erst einmal nur ein Tool, um in einer Applikation Komponenten voneinander zu trennen. Also ganz wichtig:
  • 1 Applikation!
  • mehrere Komponenten in der Applikation, die sich nicht kennen sollen.

Das ist also sowas wie: Du hast einen Monolithen aber intern hast Du mehrere Komponenten, die schon einmal getrennt sind.

Das gibt es natürlich auch noch in größer. Das nennt sich dann Enterprise Service Bus. Da gibt es auch mehrere Libraries / Lösungen zu. Da hast Du unter dem Stricht auch wieder den Aufbau wie vorher nur jetzt läuft es nicht mehr in einer Applikation, sondern mehrere Applikationen kommunizieren und das auch über das Netz,

Eine mögliche Library ist dann z.B. von Apache: https://servicemix.apache.org/
Und wenn Du Dir die Seite ansiehst, dann wird auch schnell klar, was da dann direkt für eine Komplexität entstanden ist intern:
  • Message Queuing kommt da rein - hier mit ActiveMQ
  • Apache Camel kommt rein für diverse Dinge um die Steuerung intern zu beeinflussen (um es mal ganz grob zu beschreiben - Link folgen und ansehen!)
  • Persistency ist wichtig - JPA kommt da ins Spiel
  • Ggf. willst Du Transaktionen haben? Distributed Transactions (XA Transactions) sind doch was feines ... Das, was die Entwickler bei Microservices scheuen wie der Teufel das Weihwasser will doch kein Masochist Links liegen lassen :)

Das wäre also evtl. das, was Dich interessieren könnte. Neben Apache gibt es da natürlich auch noch andere Libraries, die sowas machen....
Vielen Dank, das interessiert mich natürlich..
 

Adriano10

Bekanntes Mitglied
Der EventBus in Guava ist erst einmal nur ein Tool, um in einer Applikation Komponenten voneinander zu trennen. Also ganz wichtig:
  • 1 Applikation!
  • mehrere Komponenten in der Applikation, die sich nicht kennen sollen.

Das ist also sowas wie: Du hast einen Monolithen aber intern hast Du mehrere Komponenten, die schon einmal getrennt sind.

Das gibt es natürlich auch noch in größer. Das nennt sich dann Enterprise Service Bus. Da gibt es auch mehrere Libraries / Lösungen zu. Da hast Du unter dem Stricht auch wieder den Aufbau wie vorher nur jetzt läuft es nicht mehr in einer Applikation, sondern mehrere Applikationen kommunizieren und das auch über das Netz,

Eine mögliche Library ist dann z.B. von Apache: https://servicemix.apache.org/
Und wenn Du Dir die Seite ansiehst, dann wird auch schnell klar, was da dann direkt für eine Komplexität entstanden ist intern:
  • Message Queuing kommt da rein - hier mit ActiveMQ
  • Apache Camel kommt rein für diverse Dinge um die Steuerung intern zu beeinflussen (um es mal ganz grob zu beschreiben - Link folgen und ansehen!)
  • Persistency ist wichtig - JPA kommt da ins Spiel
  • Ggf. willst Du Transaktionen haben? Distributed Transactions (XA Transactions) sind doch was feines ... Das, was die Entwickler bei Microservices scheuen wie der Teufel das Weihwasser will doch kein Masochist Links liegen lassen :)

Das wäre also evtl. das, was Dich interessieren könnte. Neben Apache gibt es da natürlich auch noch andere Libraries, die sowas machen....
Ich habe es geschafft, ich lag leider falsch und ihr alle habt mir klar gemacht, was ich machen sollte.. Also habe ich drei Module Client, Server und Common erstellt. Common enthält die Nachrichtenklassen die zwischen Client und Server ausgetauscht werden. Wenn Client zu dem Server irgendwas sendet, wird erstmal in der Nachrichtenklasse z.B LoginRequest gespeichert und nachdem sie auf den Server angekommen ist, wird durch eventBuss auf dem Server gepostet, entsprechend wird sie durch @Subscribe auf dem Server abgefangen und verarbeitet das gleiche passiert auf dem Client.

oh mein Gott,

Vielen Dank noch Mal.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
K Verständnisproblem bei Server/Client Java Basics - Anfänger-Themen 3
D Verbesserungsvorschläge zur Struktur einer Client Server Desktop Chat App Java Basics - Anfänger-Themen 24
D Unerwartetes Verhalten bei Client Server Chat App Java Basics - Anfänger-Themen 12
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
K Verständnisfrage Server/Client BufferedReader, PrintWriter Java Basics - Anfänger-Themen 2
A Client-Server Kommunikation Java Basics - Anfänger-Themen 3
S Server - für jeden Client ein Serverthread Java Basics - Anfänger-Themen 2
L Erste Schritte Erste Versuche mit Server und Client Java Basics - Anfänger-Themen 7
elischa Client-Server IO und Stream Steuerung ? Java Basics - Anfänger-Themen 2
I Print Client -> Server -> Client? Java Basics - Anfänger-Themen 1
I lokales Programm mit Client/Server Programm kommunizieren Java Basics - Anfänger-Themen 3
J TCP MultiThreaded Server und Client - irgendwo ist der Fehler, aber ich find ihn nicht Java Basics - Anfänger-Themen 3
K Java Client > Python Server Java Basics - Anfänger-Themen 0
S Java - Client/Server mit Stomp kurze Frage Java Basics - Anfänger-Themen 0
E Client Server Java Basics - Anfänger-Themen 12
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
O Server Client Problem Java Basics - Anfänger-Themen 2
H Java Server/Client, HTML Seite anzeigen Java Basics - Anfänger-Themen 2
L Server pingt Client und fordert Info Java Basics - Anfänger-Themen 2
R Server/Client für Spiel Java Basics - Anfänger-Themen 2
X Applet - Client/Server Java Basics - Anfänger-Themen 2
L Bild versenden über Client/Server Java Basics - Anfänger-Themen 10
S Klassen Server und Client Java Basics - Anfänger-Themen 3
M Client - DB-Server Struktur Java Basics - Anfänger-Themen 7
U Probleme mit Server-Client implementierung Java Basics - Anfänger-Themen 5
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
Z Tomcat Server Kommunikation zu Client Applet Java Basics - Anfänger-Themen 5
B Server-Client mit Thread ausstatten Java Basics - Anfänger-Themen 3
D Client-Server Problem Java Basics - Anfänger-Themen 2
J Netzwerkrprogammierung Client - Server Java Basics - Anfänger-Themen 3
J Netzwerkprogrammierung Client/Server Java Basics - Anfänger-Themen 16
G ArrayListe vom Server nach Client schicken Java Basics - Anfänger-Themen 17
G JMS -> Wie Anmeldung vom Client an Server? Java Basics - Anfänger-Themen 4
I Server / Client Programm wie einen String übergeben? Java Basics - Anfänger-Themen 6
B Client - Server Verbindung über sockets mysql DB ansprechen? Java Basics - Anfänger-Themen 6
G Java Server Client Programmierung Java Basics - Anfänger-Themen 3
B Bild/Datei von einem Server an einen Client senden Java Basics - Anfänger-Themen 6
D Server/Client Java Basics - Anfänger-Themen 8
H Server Client, es kommt nichts an. Java Basics - Anfänger-Themen 5
G [Hilfe] Fileupload: Client-Server Java Basics - Anfänger-Themen 9
S Server/Client Verbindung Java Basics - Anfänger-Themen 2
G Dateidownload Client-Server (jsp) Java Basics - Anfänger-Themen 4
G Zugriff vom 'Server auf Client' Java Basics - Anfänger-Themen 4
S Client-Server Java Basics - Anfänger-Themen 18
X client soll bat auf server ansprechen Java Basics - Anfänger-Themen 7
C client/server programm fehler ! Java Basics - Anfänger-Themen 20
C string über server/client verbindung senden ? Java Basics - Anfänger-Themen 4
K [servcer/Client] Suche Server /Client Tutorial. Java Basics - Anfänger-Themen 2
FireHorses Benutzernamen aus PrivateChannel(Interaction) auf Server bringen Java Basics - Anfänger-Themen 0
HolyFUT Best Practice Architektur WebSocket Server Java Basics - Anfänger-Themen 1
S Server Java Basics - Anfänger-Themen 4
S Server Java Basics - Anfänger-Themen 3
M CS GO Server mit Java steuern Java Basics - Anfänger-Themen 3
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
B DHCP-Server Adresse ermitteln Java Basics - Anfänger-Themen 4
F Mehrere Server Sockets in einer Anwendung Java Basics - Anfänger-Themen 9
R Antwort vom Server an mehreren Clients senden Java Basics - Anfänger-Themen 3
W Netwerkprogrammierung und Http Server Java Basics - Anfänger-Themen 10
G sql server connection mit windows authentication Java Basics - Anfänger-Themen 2
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
U Erste Schritte Server will nicht übergebenes Objekt speichern Java Basics - Anfänger-Themen 5
B IP Adresse von Wildfly Server Java Basics - Anfänger-Themen 1
cezary Server läßt sich nicht starten Java Basics - Anfänger-Themen 2
J Java Server Pages - Verständnisfrage Java Basics - Anfänger-Themen 2
H java.lang.NoClassDefFoundError Run as>> Run on Server Java Basics - Anfänger-Themen 2
F String zu einem Server senden Java Basics - Anfänger-Themen 4
N Server Zeit zur lokalen Zeit setzen. Java Basics - Anfänger-Themen 0
I ical - Datei auf Server ablegen und Kalender abbonieren Java Basics - Anfänger-Themen 0
T Eclipse - GlassFish Server!? Java Basics - Anfänger-Themen 1
I Java Server Faces mit Glassfish Webseite veröffentlichen Java Basics - Anfänger-Themen 4
M Input/Output tcp-Server mit statischer Parallelität Java Basics - Anfänger-Themen 7
G Multiple Clients and one Server Java Basics - Anfänger-Themen 2
F jabva 7.21 läuft nicht auf windows server 2012? Java Basics - Anfänger-Themen 9
D Socket ---> Server Socket worauf muss ich achten? Java Basics - Anfänger-Themen 2
I JDK SERVER -jar stoppen Java Basics - Anfänger-Themen 5
Screen Wie Propertydatei im Server beschreiben? Java Basics - Anfänger-Themen 7
K threaded server Java Basics - Anfänger-Themen 18
Q Datenbank nicht über separaten Server Java Basics - Anfänger-Themen 4
L Chat server Java Basics - Anfänger-Themen 4
B Java Server Side Java Basics - Anfänger-Themen 14
G JObjekte dynamisch vom Server erzeugen lassen Java Basics - Anfänger-Themen 4
A Server logs auslesen Java Basics - Anfänger-Themen 6
Z Threads, Server, GUI Java Basics - Anfänger-Themen 4
M Java class auf Server starten Java Basics - Anfänger-Themen 5
U Java-Programm auf einem Server starten Java Basics - Anfänger-Themen 33
D Java Applet Dateien auf Server auslesen? Java Basics - Anfänger-Themen 8
I Interface Comparable für Server-Item-Interface Java Basics - Anfänger-Themen 12
N Methoden Test ob Server vorhanden ist Java Basics - Anfänger-Themen 4
S .Bat Server von .java Starten Java Basics - Anfänger-Themen 5
L Server mit mehreren Clients Java Basics - Anfänger-Themen 25
M daytime-Server Port 13 Java Basics - Anfänger-Themen 2
O (von Applet) daten an Server übergeben Java Basics - Anfänger-Themen 4
W mehrere clients auf einem server Java Basics - Anfänger-Themen 2
R Server-Daten sichern/verschlüsseln Java Basics - Anfänger-Themen 10
N Applets: Objekte vom Server laden Java Basics - Anfänger-Themen 4
V pfad.exists() gilt nicht für "//server/a/xyz.jpg"? Java Basics - Anfänger-Themen 12
F SQL Server aus Umlaute werden Fragezeichen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben