Boa tarde pessoal,
estou começando a fazer um jogo de cartas (super trunfo), onde tenho que implementar um servidor e vários clientes, onde cada cliente deve ser controlado por uma Thread, e uma partida só pode acontecer quando dois clientes estão conectados.
public class Servidor {
Baralho b = new Baralho();// Baralho é a classe onde eu passo os valores das cartas
List<Carta> jogA = b.lista.subList(0, 5);
List<Carta> jogB = b.lista.subList(5, 10);
boolean funciona = true;
int codCliente = 0;
public Servidor() throws IOException{
b.Embaralhar();
ServerSocket servidor = new ServerSocket(12345);
System.out.println("Porta 12345 aberta!");
while (funciona){
Socket cliente = servidor.accept();
Escravo escravo = new Escravo(cliente, codCliente);
Thread t = new Thread(escravo);
t.start();
escravo.sendMessage("msg do server");
codCliente++;
}
servidor.close();
System.out.println("O servidor foi fechado");
}
public static void main(String[] args) throws IOException {
new Servidor();
}
}
public class Cliente extends Thread {
private final String ip;
private final int port;
private Socket connection;
private DataOutputStream out;
private DataInputStream in;
private BufferedWriter writer;
private BufferedReader reader;
private boolean run;
public Cliente(String ip, int port ) {
this.ip = ip;
this.port = port;
this.run = true;
}
public void connect() throws IOException{
connection = new Socket(ip, port);
System.out.println("O cliente se conectou ao servidor!");
out = new DataOutputStream(new BufferedOutputStream (connection.getOutputStream()));
in = new DataInputStream(new BufferedInputStream(connection.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter (connection.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
}
public void close() throws IOException{
run = false;
out.close();
in.close();
reader.close();
writer.close();
connection.close();
}
@Override
public void run() {
System.err.println("Cliente rodando");
try{
System.err.println("Cliente vai conectar");
this.connect();
System.err.println("Cliente conectou");
while (!connection.isClosed() || connection.isConnected()|| connection.isBound()){
System.err.println("Cliente esperando mensagem");
String message = reader.readLine();
System.err.println(message);
// if (message.equals("END")){
// this.close();
// break;
// }
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Cliente cliente = new Cliente("localhost", 12345);
cliente.start();
}
}
ainda tenho uma classe carta e uma baralho onde atribuo os valores das cartas e insiro em uma List.
Essa é basicamente a estrutura inicial que tenho.
Minhas dúvidas são como faço para diferenciar um cliente do outro, e como faço a comunicação cliente/cliente para saber qual carta o oponente jogou.
se alguém puder me ajudar...