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?