Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/09/2015, 13:45
Kritik
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: socket cuelga el programa

El acept() ya lo tuve en cuenta, no está ahí el problema. Mi serversocket acepta de manera automática las conexiones, además tengo un máximo de 50 conexiones así que tampoco es por huecos en el serversocket.

He estado intentando aislar más aún el momento exacto del cuelgue. Y por ahora lo puedo definir aquí:

Mi servidor de servicios conecta con mi servidor de servidores. Informa de que está disponible, recibe confirmación ("Servidor Registrado") y cierra ese socket, así como los objetos de lectura y escritura. Lo cierro todo. y aunque el objeto conexión sigue estando en el programa, el socket que tiene ese objeto está cerrado.

Luego hago una condición, de que si el texto que había recibido antes (y que guardé en variable) es "Servidor Registrado" entonces me creo un objeto serversocket. Exactamente el mismo objeto que está en mi servidor de servidores, pero en distinto puerto. Y entonces... CRASH!! Se queda colgado ahí.

Este es mi código:

Código:
void lanzarServidor(){
	ServerClients.txtLogs.setText(ServerClients.txtLogs.getText() + "\nArrancando Servidor.");
	JOptionPane.showMessageDialog(null,"Aceptar");
	try {
		s=new ServerSocket(50007,20); // conexión por el puerto 50007 y
						// máximo de 20 clientes conectados
		JOptionPane.showMessageDialog(null,"Aceptar2");
		while (true){
			JOptionPane.showMessageDialog(null,"Aceptar3");
			new ClienteServidor(s.accept(),this,cliente++).start();
			JOptionPane.showMessageDialog(null,"Aceptar4");
		}
	} catch (IOException ioe) {
		ServerClients.txtLogs.setText(ServerClients.txtLogs.getText() + "\nError al lanzar el servidor. " + ioe.getMessage());
	}
}
}
Y este es el constructor, junto con su primera línea
Código:
ClienteServidor(Socket c,ConexionDeCliente s,int numero){
		JOptionPane.showMessageDialog(null,"Aceptar 5");
Llego a ver los avisos "Aceptar","Aceptar2" y "Aceptar3".
El mensaje "Aceptar 4" y el de "Aceptar 5" no llego a verlos ninguno.

Por cierto, tampoco es que me suelte ningún error de ningún tipo.

Y como digo, el servidor de servidores tiene exactamente el mismo código, pero en otro puerto. Lo único que cambia es el nº del puerto. Y el servidor de servidores funciona perfectamente.

Última edición por Kritik; 29/09/2015 a las 14:22