Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/11/2014, 11:00
Kritik
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 1 mes
Puntos: 31
Introduccion a Servlets

Tengo un código que no entiendo del todo, parece simple y entiendo mucho de él, pero no llego a decifrarlo del todo.

Código:
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;	
	}
}
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.

(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?

Última edición por Kritik; 07/11/2014 a las 11:11