Socket Server Anwendung - Empfang eines Byte-Arrays

Status
Nicht offen für weitere Antworten.

tsteinmaurer

Mitglied
Hallo,

ich stehe vor der Aufgabe eine Socket Server Anwendung zu implementieren, die im wesentlichen das folgende Protokoll verstehen und abarbeiten muss:

Zeile 1 als normaler String\n
Zeile 2 als normaler String\n
Zeile 3 als normaler String\n
Länge des Byte-Arrays als normaler String\n
Byte-Array, der die ZLib komprimierte Fassung eines längeres Textes darstellt (unterschiedlich groß, womöglich mit \n drinnen, usw ...)


Die Socket Server Anwendung als solches (z.B. Multi-Threaded, usw ...) stellt nicht wirklich das Problem dar, das Problem ist vielmehr, wie man die Kombination aus normalen Strings (Zeile1 - Länge des Byte-Arrays) und Byte-Arrays am besten einliest, damit man das Byte-Array wieder als byte[] zur Verfügung hat, um im Server eine ZLib-Dekomprimierung zu machen.

Mit BufferedReader ist z.B. das Einlesen von Zeile 1 - Länge des Byte-Arrays einfach, allerdings vielleicht nicht das geeignete Mittel für das Einlesen des Byte-Arrays.

Habt Ihr da einen Tipp?

Danke,
Thomas
 
T

tuxedo

Gast
DataInput und DataOutputStream kann String lesen und schreiben.

Die ganzen "Reader" würde ich möglichst meiden.

- Alex
 
T

tuxedo

Gast
?? Was hat ein Dekorierer damit zu tun? Es geht ja nicht um die manipulation des Streams. Es geht um's korrekte ein einfache lesen von unterschiedlichen Daten aus dem Stream.

- Alex

[update]

Wenn das Protokoll wirklich fix ist und es keine große Abweichung geben darf, dann würde ich das ganze so im Client realisieren:

Code:
		InputStream is = null; // InputStream hier vom Socket holen statt mit null zu initialisieren
		DataInputStream dis = new DataInputStream(is);

		// Protokollaufbau
		//		Zeile 1 als normaler String\n
		//		Zeile 2 als normaler String\n
		//		Zeile 3 als normaler String\n
		//		Länge des Byte-Arrays als normaler String\n
		//		Byte-Array, der die ZLib komprimierte Fassung eines längeres Textes darstellt (unterschiedlich groß, womöglich mit \n drinnen, usw ...)
		
		String line1 = dis.readUTF();
		String line2 = dis.readUTF();
		String line3 = dis.readUTF();
		String dataLength = dis.readUTF();
		int intLength = Integer.parseInt(dataLength);
		
		byte[] data = new byte[intLength];
		dis.readFully(data);

Die Serverseite dazu sieht ähnlich aus.

- Alex
 

tsteinmaurer

Mitglied
Hi Alex,

danke schon mal für die Antwort. Dein Code zeigt eigentlich ja die Serverseite oder? Weil ja was eingelesen wird. Erkennt readUTF() eigentlich dann ein \n, d.h. wird mit diesem Aufruf eine komplette Zeile eingelesen? Scheint hier nicht so zu funktionieren.

Welches Gegenstück würdest Du in meinem Fall auf der Clientseite zum Schreiben auf den Stream verwenden, wenn wieder normale Strings und das byte[] Array involviert ist?

Besten Dank nochmal!


Thomas
 
T

tuxedo

Gast
Wenn du Client und Serverseite in der Hand hast, dann bist du doch bzgl. des Protokolls ein wenig "flexibel".

Wenn du auf der einen Seite mit

Code:
dataOutputStream.writeUTF(line1);

einen String (ob der jetzt ein \n enthält oder nicht ist deine Sache) reinschreibt, dann kannst du exakt diesen String auf der anderen Seite mit

Code:
dataInputStream.readUTF()

wieder auslesen.

Würde auf beiden Seiten also mit Data*Stream arbeiten.

- Alex
 

tsteinmaurer

Mitglied
Hallo Alex,

wir haben sowohl den Client als auch den Server in der Hand, d.h. solange diese Teile noch nicht in Produktion sind, haben wir quasi freie Hand. ;-)

Allerdings handelt es sich bei der Client-Anwendung um eine C++ Anwendung. Die serverseite wird halt mit Java gemacht. Du hast mir mit dem DataInputStream den notwendigen Schubbs in die richtige Richtung gegeben.

Funktioniert derzeit alles wunderbar.

Besten Dank für Deine Hilfe!

Thomas
 

Murray

Top Contributor
Wenn die eine Seite in C++ realisiert ist, bist Du mit den Data**putStreams m.E. nicht so gut bedient: ein DataInputStream ist dafür da, Daten zu lesen, die mit einem DataOutputStream geschrieben wurden u.u.; wie das dabei verwendete Protokoll auf der Ebene der einzelnen Bytes aussieht (ob also z.B. ein String mit einem Nullbyte terminiert wird, oder ob stattdessen zu Anfang die Länge übertragen wird) , ist ein Implementierungsdetail.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Socket - Server verbindung Allgemeine Java-Themen 12
A Socket-Server ohne Terminal laufen lassen [Windows] Allgemeine Java-Themen 5
W Socket.setSoTimeout -> BufferedReader -> Default value Allgemeine Java-Themen 4
F Einfaches Beispiel mit Netty Socket.IO Allgemeine Java-Themen 6
A ByteArray über Socket Allgemeine Java-Themen 3
Master3000 Java Port reset (Socket) Allgemeine Java-Themen 6
J socket closed - wie behandeln. Allgemeine Java-Themen 2
E Socket Java Socket Antwortet nicht. Allgemeine Java-Themen 2
J Could not convert socket to TLS - gestern liefs noch Allgemeine Java-Themen 2
Meeresgott Input/Output Java Socket Verbindung Allgemeine Java-Themen 1
D Socket Verbindung mit TLSv1 Allgemeine Java-Themen 1
C Input/Output Zip Files über Socket senden und empfangen Allgemeine Java-Themen 6
O Socket-Unterschiede zwischen Windows und Ubuntu Allgemeine Java-Themen 2
J Bytes aus Socket lesen Allgemeine Java-Themen 9
D Socket Java Socket Verbindung Allgemeine Java-Themen 14
T Serialisiertes Objekt über Socket nachladen Allgemeine Java-Themen 8
R Socket verbindung mit Timeout Allgemeine Java-Themen 2
N InputStreamReader-> DataInputStream-> Socket.getInputS Allgemeine Java-Themen 25
G Java Socket langsam unter Linux Allgemeine Java-Themen 21
P Typ Object in socket umwandeln Allgemeine Java-Themen 4
T OO zum drucken/convertieren ohne Socket Allgemeine Java-Themen 8
T ObjectOutputStream => Socket versenden Allgemeine Java-Themen 2
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
E Server Client Audio Allgemeine Java-Themen 6
E Server Client Audio Allgemeine Java-Themen 0
Jose05 Speicherung auf einem Server Allgemeine Java-Themen 1
D Live-Scripting im Server Allgemeine Java-Themen 6
Monokuma Threadproblem mit Sockets und Server Allgemeine Java-Themen 7
T imagej-server NullPointerException Allgemeine Java-Themen 1
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
C Java RMI Client - Server Allgemeine Java-Themen 0
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
M TomEE auf Windows Server 2016 installieren Allgemeine Java-Themen 4
bueseb84 Git : Mehrere Server verwenden Allgemeine Java-Themen 3
P Am Application Server - Selbe files aber trotzdem CNF Allgemeine Java-Themen 2
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
J Java - hoher Ramverbraucht auf WTS Server Allgemeine Java-Themen 8
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
C Logfile upload zu einem externen filezilla sftp server Allgemeine Java-Themen 6
S Simples Client Server Setup in Java Allgemeine Java-Themen 4
K Server mieten, Berechnungen darauf ausführen Allgemeine Java-Themen 14
Anfänger2011 Java Server oder lieber was anderes Allgemeine Java-Themen 16
F Best Practice Server und Clients Allgemeine Java-Themen 10
E JavaFX RMI extrem langsam wenn Server nicht läuft Allgemeine Java-Themen 5
D Best Practice Java Application Server , Docker oder was? Allgemeine Java-Themen 15
L Suche nach CalDav Server API Allgemeine Java-Themen 0
C Hang Man Server Client Allgemeine Java-Themen 3
C Hang man mit Server/Client Allgemeine Java-Themen 2
K Classpath JDBC Driver auf Server Allgemeine Java-Themen 4
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
I Installer, der JAVA EE Server und DB installiert Allgemeine Java-Themen 10
M Kapselung JasperReports Server und Java Allgemeine Java-Themen 5
P Java Fehler auf Win2008 Server java.io.FilePermission IE8 Version JRE 1.7.0_51 Allgemeine Java-Themen 7
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
M Checksummenprüfung bei Client Server kommunikation Allgemeine Java-Themen 3
C Mit Pc Awendungen auf Server starten Allgemeine Java-Themen 8
B Input/Output Server Startet, Jedoch Kein Output. Allgemeine Java-Themen 1
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
E Socket Client-Server-Programmierung Allgemeine Java-Themen 44
T Java Streaming-Server & Streaming-Client Allgemeine Java-Themen 4
R Fragen zu Server + UI Allgemeine Java-Themen 2
0 Lösungsweg Client Server Kommunikation Fehlermeldung ausgeben Allgemeine Java-Themen 12
D Client / Server Allgemeine Java-Themen 23
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
U AWT simulierter Tastendruck auf Virtual Server Allgemeine Java-Themen 7
Z Socket [Chatprogramm] Nachrichten vom Server anzeigen lassen Allgemeine Java-Themen 6
E Methoden Server Benutzer abfrage Allgemeine Java-Themen 2
N COM Server ansteuern / KISSsoft Allgemeine Java-Themen 3
N URLConnection - Server abgeschaltet Allgemeine Java-Themen 2
A Parser verursacht Speicherprobleme auf Server Allgemeine Java-Themen 2
T Mit Java auf Dateien zugreifen die auf einem Server liegen Allgemeine Java-Themen 5
J Problem beim Auslesen einer Datei vom Server Allgemeine Java-Themen 4
T jar Archiv auf Server ausführen Allgemeine Java-Themen 3
J Application Server Allgemeine Java-Themen 2
A Input/Output Applet-Zugriff auf PHP-Schnittstelle (externer Server) Allgemeine Java-Themen 22
C game-server GUI erstellen Allgemeine Java-Themen 13
Developer_X Java FTP - Ordner auf Server erstellen Allgemeine Java-Themen 7
C Java Server Pages Problem Allgemeine Java-Themen 6
T Gleichzeitige Zugriffe auf Daten auf dem Server Allgemeine Java-Themen 11
M Server-Responds testen, Code-Redundanz Allgemeine Java-Themen 3
T JPA Entity im Client-Server-Umfeld Allgemeine Java-Themen 19
C Primzahlen Server Allgemeine Java-Themen 3
K Server Daten Visualisieren Allgemeine Java-Themen 3
S FTP Gezippte Datei von FTP Server downloaden Allgemeine Java-Themen 24
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
B verbindung mit exchange server Allgemeine Java-Themen 3
AlexSpritze Alle Domains oder FQDN von einem Server erfragen? Allgemeine Java-Themen 2
H SwingWorker statt Thread für einen Server Allgemeine Java-Themen 2
D Versuch Server - Client anwendung Allgemeine Java-Themen 9
M Frage zum Auslesen einer Datei auf nem Server Allgemeine Java-Themen 4
ruutaiokwu MS Exchange Server 2003 Daten auslesen Allgemeine Java-Themen 2
T Welcher Server? JSP und Client-Anwendung Allgemeine Java-Themen 4
Final_Striker Datei vom Server bekommen Allgemeine Java-Themen 2
H Server Threaded machen. Port-Problem Frage Allgemeine Java-Themen 2
W programm auf server Allgemeine Java-Themen 5
C Java Polling, Server Prozedur oder doch Datenbank? Allgemeine Java-Themen 4
MQue Server- Thread Client Allgemeine Java-Themen 2
N Daten auf Server kopieren Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben