Socket -> Typ des Inputs/Outputs

HCWD

Erfahrenes Mitglied
Servus meine Lieben.

Ich hab da ein kleines Problem. Nach längerer Zeit lerne ich weiteres Zeug in Java und jetzt bin ich zu einer Sackgasse angelangt, beim Socket (Server & Client).

Gehen wir davon aus, ich will ein Loginsystem erstellen in Java. Ich gebe User (Int) und Passwort ein. Dann schick ich es mit dem Clienten per (InputStream).write("1234"); raus. Auf einmal muss ich in der Konsole feststellen, dass da ein Int-Wert raus kommt, jedoch nicht "1234" sondern "210". Kann es sein, dass es der Byte-Wert ist?

Wenn ja, wie bekomm ich den Intwert "1234" auf der Serverseite angezeigt? oder noch besser, wie kann ich Strings übergeben?
 
Also da gibt es verschiedene möglichkiten wenn du natürlich TCP Sockets verwenden willt kannst du die Daten nur als byte-stream übertragen.

Also du könntest dein int Wert als String übersenden und dann wieder in int casten.
Du kannst RMI verwenden um Objecte auszutauschen.

socket.getOutputStream().write(
new String("1234").getByte()
);
 
Ok danke schonmal für deine antwort. werde dies gleich mal austesten...

du hast tcp sockets genannt.... gibt es auch sockets für UDP? wenn ja, gibt es dadurch vorteile? etc.?

Greetz
 
Klar UDP Sockets gibt es eben so siehe: java.net.DatagramSocket
UDP ist ein Verbindungsloses ungesichertes Protokoll das bedeutet das keine Fehlerbehandlung stattfindet. Sprich es ist nicht gesichert da die Pakete auch ankommen.

Aber für einige Aufgaben ist auch UDP von Vorteil z.B. publ. eines Servers

Also ich denke mal für dein Problem ist UDP nicht geeignet denn du müsstest die Fehlerbehandlung selbst übernehmen.
 
Ich hätte noch eine weitere Frage:

Wenn ich jetzt meinen Server am Laufen habe... und mich mit meinem Clienten einwähle... läuft alles einwandfrei... jedoch schließe ich den Clienten, dann geht der Server auch "offline". Wie kann ich den Server weiterhin am Leben halten?

ich will folgendes erreichen: wenn die Applikation von diesem Server auf einem Root laufen würde, will ich nicht jedes mal die Applikation starten wenn sich ein CLient eingewählt hat und wieder ausgeloggt. Er soll durchgehend laufen, bis ich ihn nicht explizit oder seinen Prozess beendet habe.

Greetz
 
schließt du die Socketverbindung wieder korrekt? Wenn Du das nicht machst gibt es beim Server eine Exception die für das Beenden verantwortlich ist.

Du solltest auch die Anfrage des Clients in einem eigenen Thread bearbeiten, sodass auch mehrere Clients gleichzeitig arbeiten können bzw. nicht der "Annahmethread" abschmirt...
 
Zurück