N
Niki564
Gast
Hey Leute, wir müssen für die Schule irgendein Javaprojekt machen. Ich habe mich für ein Netzwerkfähiges Pokerspiel entschieden.
Zuerst wählt man aus ob man eine Lobby erstellen oder einer beitreten möchte. Beim erstellen gibt man noch den Servername ein und dann wartet man mit serverSocket.accept() auf ein Verbindung. Beim beitreten muss man nur den Spielername und IP des Servers eingeben. Danach wird eine Verbindung mit dem Server hergestellt und man sendet ihm zuerst den Spielername. Danach werden Infos in einem bestimmten Format vom Server zurückgegeben. Danach wird im Server der Socket zum Client in einer Liste gespeichert.
Hier der Code für den Server:
Hier der Code beim beitreten der Loby
Und noch die ClientLobby wenn sich jemand zum Server connected, dass der Server allen anderen Clients den neuen Spieler ebenfalls sendet
Der Fehler ist jetzt, dass die bereits erstellte Clientlobby keine Infos mehr vom Server bekommt, obwohl der Server an allen Clients den neuen Spielernamen schickt. Ich haba keine Ahnung warum das so ist, und hoffe jemand kann mir weiterhelfen!
lg Niki
Zuerst wählt man aus ob man eine Lobby erstellen oder einer beitreten möchte. Beim erstellen gibt man noch den Servername ein und dann wartet man mit serverSocket.accept() auf ein Verbindung. Beim beitreten muss man nur den Spielername und IP des Servers eingeben. Danach wird eine Verbindung mit dem Server hergestellt und man sendet ihm zuerst den Spielername. Danach werden Infos in einem bestimmten Format vom Server zurückgegeben. Danach wird im Server der Socket zum Client in einer Liste gespeichert.
Hier der Code für den Server:
Java:
Thread connect = new Thread()
{
@Override
public void run()
{
while(true)
{
try
{
joiner = connecter.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(joiner.
getInputStream()));
PrintWriter writer = new PrintWriter(joiner.
getOutputStream());
String gName = reader.readLine();
for(Socket s : clients)
{
PrintWriter out = new PrintWriter(s.getOutputStream());
System.out.println("Lobby: println");
out.println(gName);
System.out.println("Lobby: println done");
}
clients.add(joiner);
opss.add(writer);
addGamerName(gName); //Fügt den Spieler in die JList hinein
writer.println(lob.toString());
writer.flush();
} catch(IOException ex)
{
Logger.getLogger(Lobby.class.getName()).
log(Level.SEVERE, null, ex);
}
}
}
};
connect.start();
Hier der Code beim beitreten der Loby
Java:
String name = txtName.getText(), lobbyIP = txtLobbyIP.
getText();
if(name.equals("") || lobbyIP.equals(""))
{
JOptionPane.showMessageDialog(pf, "Alle Felder müssen ausgefüllt werden");
return;
}
String info = null;
try
{
socket = new Socket(txtLobbyIP.getText(), PokerFrame.PORT);
ops = socket.getOutputStream();
PrintWriter writer = new PrintWriter(ops);
ips = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(ips));
writer.println(txtName.getText());
writer.flush();
info = reader.readLine();
} catch(UnknownHostException ex)
{
Logger.getLogger(LobbyJoiner.class.getName()).
log(Level.SEVERE, null, ex);
} catch(IOException ex)
{
Logger.getLogger(LobbyJoiner.class.getName()).
log(Level.SEVERE, null, ex);
}
String[] infos = info.split(";");
LobbyPane lobby = new LobbyPane(infos[0], Integer.parseInt(infos[1]), infos[2], infos[3].
split("/"));
pf.setContentPane(lobby);
Und noch die ClientLobby wenn sich jemand zum Server connected, dass der Server allen anderen Clients den neuen Spieler ebenfalls sendet
Java:
Thread t = new Thread(new Runnable()
{
public void run()
{
while(true)
{
try
{
System.out.println("Client: create reader");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); /*beim Lobby erstellen wird der Socket zum Server mitgegeben, dies ist der <socket>*/
String cmd = in.readLine();
System.out.println("Client: readLine done");
listModel.addElement(cmd);
gamerName.add(cmd);
} catch(IOException ex)
{
Logger.getLogger(PokerFrame.class.getName()).
log(Level.SEVERE, null, ex);
}
}
}
});
t.start();
lg Niki