Hi! Ich kenne mich in Netzwerkprogrammierung noch nicht sehr gut aus. Ich möchte das Spiel TicTacToe netzwerkfähig machen, welches ich selbst geschrieben habe. Mein Problem ist wahrscheinlich sehr trivial, aber dennoch komme ich alleine nicht auf die Lösung. Meine Lösung wäre diese: Es gibt einen Startbildschirm bei Server und Client in dem man Name und Spielerzeichen (X,O) auswählen kann. Welches Zeichen jeder benutzt ist für das Spiel ja egal, denn es muss ja nur gespeichert werden das der jeweilige andere Spieler eben ein anderes Zeichen hat. Nun soll man den Server starten können und auf eine Anfrage eines Clients warten. Der Client soll zudem die Möglichkeit besitzen eine IP Adresse des Servers und dessen Port anzugeben. Nun sollen erst die jeweiligen Namen ausgetauscht werden und der erste Spieler ausgewählt werden. Dabei nutze ich immer eine sende(String str) und empfange() Methode. Jedoch wenn ich dies so realisiere, ist der Server immer der Spieler, der am Zug ist, was meiner Meinung nach nicht ganz in das Konzept Server/Client passt. Wie kann ich es realisieren das der Server empfangen und senden kann, und der Client auch, ohne jedesmal die Servereigenschaft dem anderen Spieler zu geben?
Es soll gesendet werden können per String:
1. 1 mal Name des anderen Spielers.
2. mehrmals die jeweilige Koordinate des Feldes.
3. Ein Spielabbruch von einem der Spieler.
4. Ein Neustart von einem der Spieler.
Ansatz der sende/empfangs Methoden: (PS: Ich weis das es sich hierbei erstmal um eine Socketverbindung handelt in der noch keine IP Adressen wichtig sind)
Es soll gesendet werden können per String:
1. 1 mal Name des anderen Spielers.
2. mehrmals die jeweilige Koordinate des Feldes.
3. Ein Spielabbruch von einem der Spieler.
4. Ein Neustart von einem der Spieler.
Ansatz der sende/empfangs Methoden: (PS: Ich weis das es sich hierbei erstmal um eine Socketverbindung handelt in der noch keine IP Adressen wichtig sind)
Code:
public String empfangen() throws IOException{
ServerSocket server = new ServerSocket(3140);
while (empf.equals("")) {
System.out.println("empfange");
Socket client = server.accept();
//InpuStream
InputStream in = client.getInputStream();
BufferedReader rdr = new BufferedReader(new InputStreamReader(in));
synchronized(server){
try{
server.wait(800);
}
catch(InterruptedException ex){
System.err.println(ex);
}
}
empf = rdr.readLine();
client.close();
}
return empf;
}
public void senden(String str) throws IOException{
Socket server = new Socket("localhost", 3141);
//InputStream
InputStream in = server.getInputStream();
BufferedReader rdr = new BufferedReader(new InputStreamReader(in));
//OutputStream
OutputStream out = server.getOutputStream();
BufferedWriter wrt = new BufferedWriter(new OutputStreamWriter(out));
wrt.write(str);
wrt.write( "\r\n");
wrt.flush();
server.close();
}