Código:
es un juego de las 3 en raya. Por otro lado tengo el código del cliente, en el cual se dibuja el tablero de las 3 en raya y manda la ficha clickada al servidor. Me gustaría entender este código en la parte del server y de tratar al cliente, que parece muy sencillo, para así darle yo otros usos.class ServidorRaya{
ServerSocket s;
int clientes;
//Lanza la aplicación del servidor
void lanzarServidor() {
System.out.println("lanzar servidor");
try{
s=new ServerSocket(5001,50); //conexión por el puerto 5001 y máximo de 50 clientes conectados
while(true)new NuevoCliente(s.accept(),this,clientes++).start();
}catch(IOException ioe){
System.out.print(ioe);
}
}
public void anadir(String texto) {
System.out.println("texto "+texto); //añadir un nuevo cliente
}
public static void main(String args[]){
ServidorRaya Servidor=new ServidorRaya();
Servidor.lanzarServidor();
}
}
class NuevoCliente extends Thread{
Socket conexion;
ServidorRaya serv;
int cliente;
DataInputStream entrada;
DataOutputStream salida;
int [][] tablero= new int [3][3];
NuevoCliente(Socket c,ServidorRaya s,int numero){
try {//Entrada de un nuevo cliente
System.out.println("Nuevo Clinte entrada");
InetAddress ia=c.getInetAddress();
System.out.println(ia.getHostName());
System.out.println(InetAddress.getLocalHost());
conexion=c;
serv=s;
cliente=numero;
entrada=new DataInputStream(conexion.getInputStream());
salida=new DataOutputStream(conexion.getOutputStream());
}
catch(IOException e){
System.out.println(e);
}
}
public void run(){ //método run, obligatorio en el thread
boolean Salir=false;
System.out.println("run");
serv.anadir("cliente "+cliente+" se ha conectado \n"); //añadir el cliente al servidor
for(int i=0;i<3;i++) for(int j=0;j<3;j++)tablero[i][j]=0;
while(!Salir){
try{
String cadena=entrada.readUTF(); //Lee posición del cliente
if (cadena.equals("Nuevo")) //Si se acabó la partida, para empezar un juego nuevo
for (int i=0;i<3;i++)for(int j=0;j<3;j++)tablero[i][j]=0;
else{
cadena=CalucarResultado(cadena); //Calcula una posición disponible aleatoria
//Pintar(); //muestra el resultado por consola
salida.writeUTF(cadena); //devulve la posición al cliente en formato x#y
}
}catch(SocketException se){
Salir=true;
}catch(IOException e){
Salir=true;
System.out.println(e);
}
}
serv.anadir("Se ha ido el cliente " +cliente+"\n");
try{
conexion.close();
}catch(IOException e){
System.out.println(e);
}
}
void Pintar(){
for(int i=0;i<3;i++){
for(int j=0;j<3;j++)System.out.print(tablero[i][j]+" ");
System.out.println();
}
}
String CalucarResultado(String cad){
int i,j,pos=0;
pos=cad.indexOf("#");
i=Integer.parseInt(cad.substring(0,pos));
j=Integer.parseInt(cad.substring(pos+1,cad.length()));
System.out.println("Cliente:"+i+" "+j);
tablero[i][j]=1; //pone la posición dada por el cliente en la matriz
do{ //posición aleatoria libre
i=(int)(Math.random()*3);
j=(int)(Math.random()*3);
}
while(tablero[i][j]==1 || tablero[i][j]==2 ); //posición aleatoria libre
tablero[i][j]=2;
cad=String.valueOf(i)+"#"+String.valueOf(j); //Cadena de posición del servidor
return cad;
}
}
(He de añadir lo que dice en comentarios que he de mencionar al autor Borja de la web de http://www.todojava.tk (Web que he visto ya no está en funcionamiento))
Alguien podría decirme de donde puedo sacar un manual sencillo para aprender a hacer servidores sencillos como este?


