Hallo zusammen,
ich wage mich heute zum ersten Mal richtig an die Netzwerkprogrammierung, komme aber nicht so richtig weiter.
Zum Einstieg wollte ich ein kleines Spiel schreiben. Die Struktur sollte wie folgt ablaufen:
Der Server läuft im Hintergrund und wird zu Beginn gestartet.
Er läuft in einem Thread. In der run() wird zyklisch socket = server.accept(); aufgerufen, damit er ständig Verbindungen annehmen kann.
Im Spiel soll nun z.B. jede Sekunde ein Datenabgleich mit dem Server gemacht werden. Es läuft also ein Thread, der jede Sekunde die Spieldaten vom Server läd.
Hier mal die Codes (auf das Wichtigste beschränkt, so also nicht lauffähig):
Server:
Client:
Der erste Aufruf von gibSpiel() liefert den gewünschten Erfolg. Es wird ein gültiges Spiel zurück gegeben. Beim zweiten Aufruf blockiert "new ObjectInputStream(this.serverSocket.getInputStream());"
den Thread, es wird also weder der Code gesendet, noch ein Ergebnis empfangen.
Funktioniert diese Strategie generell nicht oder hab ich die Client-Server Kommunikation noch nicht verstanden?
Danke für Antworten
edit: "Spiel" könnte übrigens besser "Spieldaten" heißen. Das sind Daten wie z.B. die Positionen der Spieler.
lg Toto
ich wage mich heute zum ersten Mal richtig an die Netzwerkprogrammierung, komme aber nicht so richtig weiter.
Zum Einstieg wollte ich ein kleines Spiel schreiben. Die Struktur sollte wie folgt ablaufen:
Der Server läuft im Hintergrund und wird zu Beginn gestartet.
Er läuft in einem Thread. In der run() wird zyklisch socket = server.accept(); aufgerufen, damit er ständig Verbindungen annehmen kann.
Im Spiel soll nun z.B. jede Sekunde ein Datenabgleich mit dem Server gemacht werden. Es läuft also ein Thread, der jede Sekunde die Spieldaten vom Server läd.
Hier mal die Codes (auf das Wichtigste beschränkt, so also nicht lauffähig):
Server:
Java:
public class ServerRunnable implements Runnable {
private ServerSocket server;
private Spiel spiel;
private Socket socket;
private ObjectInputStream in;
private ObjectOutputStream out;
public ServerRunnable() throws IOException {
spiel = new Spiel();
server = new ServerSocket(57070);
}
@Override
public void run() {
while (true) {
socket = server.accept();
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());
Object input;
if ((input = in.readObject()) != null) {
if (input instanceof Integer) {
Integer serverCode = (Integer) input;
if (serverCode.equals(ServerCodes.GIB_SPIEL)) {
out.writeObject(spiel);
}
}
}
}
}
Client:
Java:
@Override
public void run() {
while (true) {
Thread.sleep(1000);
this.spiel = gibSpiel();
}
}
public Spiel gibSpiel() {
Spiel spiel = null;
out = new ObjectOutputStream(this.serverSocket.getOutputStream());
out.writeObject(ServerCodes.GIB_SPIEL);
out.flush();
in = new ObjectInputStream(this.serverSocket.getInputStream());
spiel = (Spiel) in.readObject();
return spiel;
}
Der erste Aufruf von gibSpiel() liefert den gewünschten Erfolg. Es wird ein gültiges Spiel zurück gegeben. Beim zweiten Aufruf blockiert "new ObjectInputStream(this.serverSocket.getInputStream());"
den Thread, es wird also weder der Code gesendet, noch ein Ergebnis empfangen.
Funktioniert diese Strategie generell nicht oder hab ich die Client-Server Kommunikation noch nicht verstanden?
Danke für Antworten
edit: "Spiel" könnte übrigens besser "Spieldaten" heißen. Das sind Daten wie z.B. die Positionen der Spieler.
lg Toto
Zuletzt bearbeitet: