Frage zur Socketprogrammierung

questionmark

Neues Mitglied
Hallöchen 🙂
hab eine kleine frage, auf die ich keine antwort finde.
ich benötige ein programm, das unterteilt ist in Klient und server.
ich kenne das so:
der server hat einen serversocket
der klient einen socket

nun hab ich beide erzeugt, aber der serversocket muss zuerst starten, da der socket vom klienten sonst meckert weil er kein I/O hat, und er schließt sich.
meine klienten sollen aber das programm immer laufen haben und erst reagieren wenn ein serversocket eröffnet wird.
da ich viele klienten habe wäre das ja quatsch den klienten den serversocket zu geben, der kann ja dann immer laufen.

versteht ihr was ich meine?
 
Zuletzt bearbeitet von einem Moderator:
Die Frage war: versteht ihr was ich meine? Die Antwort ist: so ungefähr. Das hilft dir aber wohl noch nicht.

Überlege doch, ob nicht ein Webserver oder ein Applicationserver benötigt wird.

Für kleinere Sachen reicht auch Spring (mit Spring Remoting) oder eine andere Remoting API (Apache Mina, JBoss Remoting, Netty). Natürlich kann man auch vieles selber machen: RMI oder SIMON, oder Hardcore: Sockets.
 
welche Richtungen kommen denn ungefähr in Frage,
die Clients laufen schon bevor der Server da ist, schön und gut, aber was soll denn ungefähr passieren bei neuem Server,
soll der alle Clients aktiv ansprechen? oder diese periodisch nachschauen ob Server inzwischen da?
 
das wäre eigentlich egal wie die server-client-verbindung geprüft wird
gefunden habe ich noch diesen thread (is der runnable 😀 )

http://www.java-forum.org/netzwerkp...r-server-client-chat-weiteren-funktionen.html

ist diese methode zu empfehlen? in einer schleife mehrere ports abzulaufen und zu warten bis ein port bindet? oder bessere methoden dafür?

p.s. ich komme nicht ins postfach...und passwort-vergessen geht leider auch nicht
kann ein admin meine email-adresse ändern?

questionmark
 
Frage: Was für einen Sinn soll es haben, wenn du mehrere Clienten hast, die aber im Endeffekt nichts machen können? Wäre nett wenn du dein Problem mal genauer beschreiben könntest.
 
danke für deine antwort,
was die clienten dann machen ist ja egal
mein problem ist nur:

das client-programm soll mit windows starten(im autorun ordner) und so lange horchen, bis sich der server verbindet,
und dann BEISPIELSWEISE eine methode "sayHello()" ausführen.
aber wie Horche ich nach dem server? bis er startet eben.
eine lösung ist in dem thread den ich gelinkt hab, aber das schaut so..."unkonventionell" aus
 
Also erstmal ist diese Antwort ohne Gewähr.

Du könntest etwas in der Art versuchen:
Java:
private boolean bla;

try {
Socket socket = new Socket("IP", 1338);

while (bla == false) {
DataInputStream dataIn = new DataInputStream(socket.getInputStream());
DataOutputStream dataOut = new DataOutputStream(socket.getOutputStream());

//Lass den Clienten was machen :D

}catch (UnknownHostException e) {
e.printStrackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}

Somit würde quasi die ganze zeit gehorcht werden. Den Server lässt du beim Start dann einfach was schreiben, was der Client verarbeitet und "bla" true setzt. Bsp
Java:
dataOut.writeUTF("Anwesend");

Dies könntest du dann im Client widerrum mit
Java:
String Status = dataIn.readUTF();

if (Status.contains("Anwesend") {
bla = true;
}
verarbeiten.

Ich hoffe, das hilft, ist mir gerade eben eingefallen 😱
 
Zuletzt bearbeitet:
Klar kann man in einer Schleife solange versuchen eine Verbindung aufzubauen bis eine zustande kommt. Aber "horchen" kann man da nirgends. Im oben geposteten (Pseudo) Code wurde ja nur einmal versucht in ein Verbindung aufzubauen. Beim erfolgreichem Verbindungsaufbau macht die anschließende Schleife keinen Sinn, bei Fehlschlag wird die Schleife (abgesehen, dass sie auch hier keinen Sinn macht) nicht erreicht, da eine Exception fliegt.
 
anscheinend hast du ein ähnliches problem?

aber ich dachte auch, dass horchen bedeutet dass auf die accept() des servers gewartet wird?
 

Zurück
Oben