Socketkommunikation: Immer nur abwechselnd?

Status
Nicht offen für weitere Antworten.

nbkr

Mitglied
Hallo,

ich habe mir mit Hilfe von quickserver.org einen kleinen TCP Server und dazu einen passenden Client geschrieben. Das Protokoll läuft im Moment so, dass Server und Client immer abwechselnd Daten hin und her schicken. Zuerst sendet der Server ein paar Zeilen, sendet dann eine Zeile mit "FIN" drin. Daraufhin sendet der Client seine Daten und beendet dies auch wieder mit "FIN". Immer abwechselnd also.

Jetzt stellt sich mir die Frage ob das auch gleichzeitig geht. Folgendes Beispiel: Der Client sendet mehrere Zeilen und in einer davon ist ein Syntax Fehler, sprich der Client hat irgendwas geschickt was nicht ins Bild passt. Jetzt soll der Server sofort "Syntax Error" Zeile liefern. Nicht erst wenn der Client alles geschickt hat. Der Client soll natürlich auch sofort auf die Antwort vom Server regieren und keine weiteren Zeilen senden sondern sein Fehler korrigieren indem er neu startet.

Geht das prinzipiel mit "normalen" Sockets oder brauch ich da java.nio dafür?

Gruß
nbkr
 

beat84

Mitglied
Nein das geht mit sockets nicht. Der Server blockiert nämlich solange er empfängt => synchrone kommunikation.

Noch ein Tipp. Markiere das ende mit CR/LF, ist so üblich

Was soll das überhaupt bringen wenn der Server gleich den Syntax überprüft?? Es reicht doch vollkommen wenn er das paket nach erhalt auf korrektheit überprüft. das ist in jedem protokoll so üblich. Wernn ihm dann was nicht passt kann er sich ja immer noch beim client beschweren.
 

nbkr

Mitglied
beat84 hat gesagt.:
Nein das geht mit sockets nicht. Der Server blockiert nämlich solange er empfängt => synchrone kommunikation.

Geht scheinbar doch, nach langem Hin und Her bin ich auf das gekommen:
http://www.benjaminfleckenstein.de/de/anleitungen/javasocketgleichzeitig/

beat84 hat gesagt.:
Noch ein Tipp. Markiere das ende mit CR/LF, ist so üblich

Das funktioniert aber nicht wenn ich mehrere Zeilen auf einmal (wie z.B. bei SMTP wenn der Body der Mail übertragen wird) gesendet werden sollen. Da brauche ich irgendeine Art von Endezeichen welche nicht auf CR/LF beruht.

beat84 hat gesagt.:
Was soll das überhaupt bringen wenn der Server gleich den Syntax überprüft?? Es reicht doch vollkommen wenn er das paket nach erhalt auf korrektheit überprüft. das ist in jedem protokoll so üblich. Wernn ihm dann was nicht passt kann er sich ja immer noch beim client beschweren.

Ich möchte einfach vermeiden, dass der Client ethliches an Daten sendet _nachdem_ er bereits Schrott abgeliefert hat. Er sollte möglichst sofort wissen das was nicht geklappt hat. Das spart Zeit und Bandbreite.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Socketkommunikation mit Webserver Netzwerkprogrammierung 5
S BufferedStream funktioniert nicht immer Netzwerkprogrammierung 7
Dann07 Audio streamen bricht immer ab nach kurzer Zeit Netzwerkprogrammierung 6
C Quelltext Webseite schlägt noch immer fehl Netzwerkprogrammierung 30
A Bestimmter URL/Certificate per Java immer vertrauen (Trustmanager/HostnameVerifier) Netzwerkprogrammierung 1
P Socket Server übertragung wird immer langsamer Netzwerkprogrammierung 4
S UDP Broadcast - Pakete kommen nicht immer an Netzwerkprogrammierung 15
nrg HTTP URLConnection immer neu öffnen? Netzwerkprogrammierung 6
G Server schickt immer null-Wert Netzwerkprogrammierung 5
M Dateidownload per FTP wird immer langsamer und bleibt dann stehen Netzwerkprogrammierung 3
1 Socket Immer offener Port? Netzwerkprogrammierung 11
N Socket Verbindung wird immer verweigert Netzwerkprogrammierung 5
T Tomcat zeigt immer nur eine Seite Netzwerkprogrammierung 3
T Socket immer Verbunden halten Netzwerkprogrammierung 11
A InputStream liest immer komplettes PHP-Script Netzwerkprogrammierung 6
C Dateiübertragung - Datei immer ein 4096faches von n Netzwerkprogrammierung 2
V Socket#getInputStream() immer der gleiche oder nicht? Netzwerkprogrammierung 4
M Socketverbindung funzt nich immer Netzwerkprogrammierung 3
S ich bekomme immer java.rmi.UnmarshalException Netzwerkprogrammierung 10
J in.ready() liefert IMMER false zurück Netzwerkprogrammierung 11
G immer wieder gleiche Sockets Netzwerkprogrammierung 2
E BufferedReader.ready() immer false Netzwerkprogrammierung 8

Ähnliche Java Themen


Oben