Einlesen von Servernachrichten von TCP-Client

jono

Top Contributor
Hallo,

unzwar habe ich einen Client programmiert mit Reader und Writer. Mir geht es jetzt erstmal nur abstrakt darum, wie ich das schaffe. Also nachdem Reader im Code soll etwas kommen, was konkrete Nachrichten spezifiziert. Es gibt mehrere Servernachrichten, die geschickt werden können und nun muss ich diese voneinander differenzieren, was ich grundsätzlich erstmal mit einem split-Array machen würde und dann die verschiedenen Spalten definieren. Aber kann mir evtl. jemand weiterhelfen? Mir fällt es gerade schwer da konkret im Code zu werden...

Und daneben muss ich es auch so implementieren, sodass wenn eine bestimmte Nachricht den Tcp-Client reicht, dass dann ein für die Nachricht vorgesehener Command ausgeführt wird, um dann die Programmlogik dementsprechend zu verändern
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Bitte was??

Bitte beschreib' Dein Problem nochmal neu und ausfürhllicher und so, dass man es auch verstehen kann!
Dafür wäre sicherlich der vorhandene Code (CodeTags!!) extremst hilfreich ;)
 

jono

Top Contributor
Java:
Thread reader = new Thread() {
                @Override
                public void run() {
                    try (InputStreamReader in = new InputStreamReader(socket.getInputStream(), cs); 
                    // z.B.   "PSCO" PlayerId Score <- PlayerId und Score sind Integer
                            OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream(), cs)) {
                        int c = in.read();
                        while (!socket.isClosed() && c >= 0) {
                            out.write(c);
                            out.flush();
                            c = in.read();
                        }
                        System.out.println("Fini2.");
                        // read System.in and send data to socket's output stream
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                };
            };
s.o. genannter Kommentar. Hier möchte ich vordefinierte Nachrichten einlesen, was ja durch einen Reader passiert. Nun soll die beispielsweise obige Nachricht eintreffen von Server Richtung Client. Was muss ich machen, um dann z.B. über ein PlayerScoreCommand die Punkte von einem Spieler zu verändern. Also Einlesen, die Felder definieren, z.B. int score = array[1]. -> Das Array: String[] array = ...split("\t);
Was kommt vor split? Wie kann ich das alles in Einklang bringen?
 

Barista

Top Contributor
Es gibt mehrere Servernachrichten, die geschickt werden können und nun muss ich diese voneinander differenzieren
Und daneben muss ich es auch so implementieren, sodass wenn eine bestimmte Nachricht den Tcp-Client reicht, dass dann ein für die Nachricht vorgesehener Command ausgeführt wird, um dann die Programmlogik dementsprechend zu verändern
Du musst ein Protokoll definieren und dann auf Client-Seite und Server-Seite implementieren (Encoder und Parser).

Zum Codieren des Command kannst Du ein Byte verwenden, falls 256 Werte ausreichen.

Jedem Command-Byte kannst Du weitere Parameter zuordnen, die nach dem Command-Byte übertragen werden.

Einfach ist es, wenn die Parameter immer eine konstante Länge haben.

Wenn die Parameter keine konstante Länge haben, benötigst vor dem variable langen Daten-Stück eine Längen-Information oder am Ende eine Ende-Information, die natürlich nicht in der Information verwendet werden dürfen.
 

jono

Top Contributor
Du musst ein Protokoll definieren und dann auf Client-Seite und Server-Seite implementieren (
Server ist schon vorgegeben, kann nur auf Client Seite verändern.
Zum Codieren des Command kannst Du ein Byte verwenden, falls 256 Werte ausreichen
Verstehe die Aussage nicht wirklich. Ein Command muss ich ja nur kreieren, z.B. wenn die eben genannte Nachricht eintritt, dann muss eine Instanz vom PlayerScoreCommand erzeugt werden, worüber dann die Methode aufgerufen wird.

Jedem Command-Byte kannst Du weitere Parameter zuordnen, die nach dem Command-Byte übertragen werden.

Einfach ist es, wenn die Parameter immer eine konstante Länge haben.

Wenn die Parameter keine konstante Länge haben, benötigst vor dem variable langen Daten-Stück eine Längen-Information oder am Ende eine Ende-Information, die natürlich nicht in der Information verwendet werden dürfen.
Auch hier kann ich dir nicht folgen, kannst du bitte versuchen das nochmal leichter zu formulieren? Wäre echt gut
 

Jw456

Top Contributor
Server ist schon vorgegeben, kann nur auf Client Seite verändern.
Da wäre es interessant wie so ei e Nachricht vom Server ausschaut. Zeige mal ein Beispiel.

Du empfängt im Moment nur ein Zeichen. Und geht in eine Schleife.
Wo du das empfange Zeichen an den Server zurück schickst warum das?
 

jono

Top Contributor
Da wäre es interessant wie so ei e Nachricht vom Server ausschaut. Zeige mal ein Beispiel.
"PSCO" 12345 42.
Du empfängt im Moment nur ein Zeichen. Und geht in eine Schleife.
Wo du das empfange Zeichen an den Server zurück schickst warum das?
Ich empfange nur ein Zeichen, weil der InputStreamReader nur immer eins bekommt. Wollte das eben eigentlich schon fragen, wie ich das anders machen kann, sodass direkt eine ganze line eingelesen werden kann, irgendwas mit einem LineNumberReader?

Und das empfangene Zeichen züruckzuschicken macht überhaupt keinen Sinn. Das ist noch von einer anderen Anwendung, muss aber gelöscht werden, ja.
 

jono

Top Contributor
BufferedReader unterstützt zeilenweises Lesen.
Hätte dazu auch was gelesen, dort habe ich nur etwas über charactertechnisches Einlesen erfahren.
Okay, über den kann ich dann auch die Zeilen splitten oder? Also es sollte doch so funktionieren, dass ich jetzt anstelle des Kommentars eben im Code-Tag ein String-Array initialisieren kann:
Java:
String[] test = buf.split(...);
Wobei buf die Instanzvariable vom BufferedReader darstellen soll.
 

jono

Top Contributor
Wie Splitte ich dann? Ein String-Array sollte doch sinnvoll sein. Aber wiee initialisiere ich es richtig und wie recherchiere ich am besten , wie ich die eingelesenen Zeilen von BufferedReader richtig Splitte
 
Zuletzt bearbeitet:

jono

Top Contributor

So sollte es doch funktionieren..
Die Zeilen möchte ich ja nicht ausgeben. Also ohne System.out.println
Würde dann stattdessen dort hinschreiben
Java:
String psco = teilen[1].trim ();
int id = teilen[1].trim();
int score = teilen[2].trim();
Oder wie könnte ich das besser schreiben. Bin mir nicht sicher ob das so wirklich Sinn macht.
 
Zuletzt bearbeitet:

jono

Top Contributor
Und ich möchte ja jetzt für 8 Servernachrichten die Array Felder neu definieren und dann noch hinzufügen dass wenn das erste Array Feld zb psco ist dann soll Instanz von der dazugehörigen command Klasse erzeugt werden und daraufhin die Methode dieser.
Kannst du mir evtl eine abstrakte Struktur oder so vorschlagen, da hängt es gerade bei mir...
 
K

kneitzel

Gast
Mein Tipp ist: Spiel doch mit den Methoden, die Du nutzen willst oder die interessant aussehen, etwas rum. Nur so lernst Du, was Du damit alles machen kannst und wie die Methoden sich verhalten. Das ist existenzielles Wissen, wenn Du so Programme schreiben willst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Json von Html request einlesen Netzwerkprogrammierung 0
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
SebSnake imdb quelltext einlesen Netzwerkprogrammierung 6
J while-Schleife / Abbruchbed. beim Einlesen eines Streams Netzwerkprogrammierung 4
G HTTP Response mit Transfer-Encoding:chunked einlesen Netzwerkprogrammierung 4
C Windows-Username sicher einlesen Netzwerkprogrammierung 11
Y nicht blockierende einlesen Netzwerkprogrammierung 2
A PDF über HTTP einlesen und in Datei schreiben Netzwerkprogrammierung 5
C gesendeten String einlesen Netzwerkprogrammierung 3
A daten an php script per post senden und ausgabe einlesen Netzwerkprogrammierung 6
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
T Client zu Client Kommunikation Netzwerkprogrammierung 2
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
ruutaiokwu ständig "sender address rejected: improper use of smtp" bei smtp-client Netzwerkprogrammierung 4
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
A Chatserver/-client - Code stoppt bei readUTF() Netzwerkprogrammierung 7
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
L Zugriffprobleme Client - Webservice AspenTechnology Netzwerkprogrammierung 0
A Client Client Übertragung Netzwerkprogrammierung 12
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
K Socket Netty Client wirft Fehler! Netzwerkprogrammierung 3
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
U Socket Client mit hash authentifizieren Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
J Client - Serversocket Netzwerkprogrammierung 1
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
N Fragen zu Sockets Client Netzwerkprogrammierung 3
F Extasys TCp Client extends Funktion Netzwerkprogrammierung 0
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
A Socket Wie ein einfacher Multithreads Service mit Telnet als Client mit Observable/Observer gelöst.... Netzwerkprogrammierung 0
K C# Server - Android Client Netzwerkprogrammierung 0
T Application Client NullPointerExc Netzwerkprogrammierung 7
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
N FTP FTP Client invalid IPv6 address (Apache Commons Net API) Netzwerkprogrammierung 6
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
X RMI: Woher kennt der Client das Schnittstellen-Interface? Netzwerkprogrammierung 2
E Thematik Client server Netzwerkprogrammierung 2
D UDP Client empfängt nichts Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
N Client Identifikation eines Servers Netzwerkprogrammierung 1
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
D SSH Client Netzwerkprogrammierung 7
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
B TCP Client Android Netzwerkprogrammierung 3
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
OnDemand Ist Client noch angemeldet? Netzwerkprogrammierung 7
F Socket Java - Server/Client simple Netzwerkprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben