elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Aplicación con sockets no funciona en LAN (sólo con localhost)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Aplicación con sockets no funciona en LAN (sólo con localhost)  (Leído 7,017 veces)
NathanD

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Aplicación con sockets no funciona en LAN (sólo con localhost)
« en: 18 Noviembre 2013, 10:26 am »

Estoy creando una aplicación cliente-servidor lo más sencilla posible (para luego implementar más cosas), pero estoy teniendo problemas para ejecutarlo en la LAN de mi casa (ya entonces de WAN ni de hablamos, el cual es mi propósito...). Sólo funciona cuando tanto el servidor como el cliente son el mismo localhost, si no, me salta la siguiente excepción:
Código:
java.net.ConnectException: Connection refused: connect

Os dejo los fuentes. Cliente:
Código
  1. import java.io.DataInputStream;
  2. import java.io.InputStream;
  3. import java.net.InetAddress;
  4. import java.net.Socket;
  5. import java.net.UnknownHostException;
  6.  
  7.  
  8. public class Cliente {
  9. //Constantes
  10. final int PUERTO = 7000;
  11. //final String HOST = "192.168.1.36";
  12.  
  13. /************/
  14.  
  15. //Métodos - constructor
  16. public Cliente(){
  17.  
  18. try{
  19. InetAddress address = InetAddress.getLocalHost();
  20. Socket skCliente;
  21.  
  22. skCliente = new Socket(address, PUERTO);
  23. InputStream aux = skCliente.getInputStream();
  24. DataInputStream flujo = new DataInputStream(aux);
  25. System.out.println(flujo.readUTF());
  26. skCliente.close();
  27.  
  28. System.out.println( e );
  29.    System.out.println("Error en la conexión." );
  30.  
  31. } catch (Exception e) {
  32. System.out.println(e);
  33.  
  34. }
  35. }
  36.  
  37. //Cuerpo del programa
  38. public static void main(String[] args){
  39. new Cliente();
  40.  
  41.  
  42. }
  43.  
  44. }
  45.  

Servidor:
Código
  1. import java.io.DataOutputStream;
  2. import java.io.OutputStream;
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. import java.net.UnknownHostException;
  6.  
  7.  
  8. public class Servidor {
  9. //Constantes
  10. final int MAX_CLIENTES = 5;
  11. final int PUERTO = 7000;
  12. /************/
  13.  
  14. //Métodos - constructor
  15. public Servidor(){
  16. ServerSocket skServidor;
  17. try {
  18. skServidor = new ServerSocket(PUERTO);
  19. System.out.println("Escucho el puerto: "+PUERTO);
  20. for(int numCli = 0; numCli < MAX_CLIENTES; numCli++){
  21. Socket skCliente = skServidor.accept();
  22. System.out.println("\tSirvo al cliente: "+skCliente.getRemoteSocketAddress());
  23. OutputStream aux = skCliente.getOutputStream();
  24. flujo.writeUTF("\nHola cliente "+ skCliente.getRemoteSocketAddress());
  25. skCliente.close();
  26. }
  27.  
  28. System.out.println( e );
  29.    System.out.println("Error en la conexión." );
  30.  
  31. }
  32.    catch (Exception e) {
  33. // TODO Auto-generated catch block
  34. System.out.println(e);
  35. }
  36. }
  37.  
  38. public static void main(String[] args){
  39. new Servidor();
  40. }
  41. }
  42.  

Gracias de antemano y saludos.


En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Aplicación con sockets no funciona en LAN (sólo con localhost)
« Respuesta #1 en: 18 Noviembre 2013, 11:51 am »

Bastante extraño, y exactamente en donde te lanza esa excepción?

Te recomiendo, que te uses Telnet (si usas Windows no viene instalado por defecto debes agregarlo o si usas linux ya viene integrado).
Primero abres el servidor y luego con Telnet, en una maquina ajena donde está el servidor, intentas conectarte. Si esto no funciona es probable  que Java esté siendo bloqueado por algún firewall y que esté causándote problemas.

Bueno has esa prueba y nos cuentas!


En línea

NathanD

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: Aplicación con sockets no funciona en LAN (sólo con localhost)
« Respuesta #2 en: 18 Noviembre 2013, 19:12 pm »

Bastante extraño, y exactamente en donde te lanza esa excepción?

Te recomiendo, que te uses Telnet (si usas Windows no viene instalado por defecto debes agregarlo o si usas linux ya viene integrado).
Primero abres el servidor y luego con Telnet, en una maquina ajena donde está el servidor, intentas conectarte. Si esto no funciona es probable  que Java esté siendo bloqueado por algún firewall y que esté causándote problemas.

Bueno has esa prueba y nos cuentas!

Gracias por responder. No pone la línea en la que se lanza la excepción.

Usando Telnet estoy igual, sólo no establece la conexión ni en la maquina ajena del servidor ni en la propia. Me dice lo siguiente:
Código:
Microsoft Telnet> open 5000
Conectándose a 5000...No se puede abrir la conexión al host, en puerto 23: Error
 en la conexión

He desactivado tanto el firewall como el antivirus. Ni idea de qué puede tratarse...

Gracias y un saludo.
En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Aplicación con sockets no funciona en LAN (sólo con localhost)
« Respuesta #3 en: 18 Noviembre 2013, 19:22 pm »

Al preguntarte donde te lanza esa excepción te preguntaba si en el cliente o en el servidor.
ahora ojo:
el telnet puedes usarlo así
Código:
telnet ip port

o

Código:
telnet 
open ip port


En línea

NathanD

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: Aplicación con sockets no funciona en LAN (sólo con localhost)
« Respuesta #4 en: 18 Noviembre 2013, 19:38 pm »

La excepción me salta en el Cliente.

Ya consigo hacer el Telnet desde un ordenador distinto, que es un paso :D La cosa es por qué no funciona desde el propio programa del servidor, ¿cuál es el problema?

Muchísimas gracias por tu atención.
En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Aplicación con sockets no funciona en LAN (sólo con localhost)
« Respuesta #5 en: 18 Noviembre 2013, 20:35 pm »

Funciona impecable

Código
  1. try{
  2. InetAddress address = InetAddress.getByName("egyware.no-ip.org");
  3. Socket skCliente;
  4.  
  5. skCliente = new Socket(address, PUERTO);
  6. InputStream aux = skCliente.getInputStream();
  7. DataInputStream flujo = new DataInputStream(aux);
  8. System.out.println(flujo.readUTF());
  9. skCliente.close();
  10.  
  11. e.printStackTrace();
  12. System.out.println("Error en la conexi&#243;n." );
  13.  
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17.  

Lo estoy probando con el pc mi casa y con el de la oficina.
Probablemente tengas algunos problemas con la configuración de redes con Windows (parece que si usas Windows) verifica que estés en una red Hogar o Trabajo, si estás en una publica probablemente estés muy restringido.

Y bueno te digo algunas cosas para que tomes en consideración:
  • Hice pequeños cambios al código, prácticamente nada.
  • Desbloqueé el puerto cuando el Firewall de windows pregunta por primera vez al usar tal puerto(por defecto siempre está activada desbloquear para redes hogareñas o trabajo).
  • El servidor está detrás de un router con los puertos desbloqueados.

Dejaré el servidor abierto si es que quieres probar, (ya van 2 iteraciones de 10)

Saludos!
« Última modificación: 18 Noviembre 2013, 20:40 pm por egyware » En línea

NathanD

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: Aplicación con sockets no funciona en LAN (sólo con localhost)
« Respuesta #6 en: 18 Noviembre 2013, 20:59 pm »

Vaya, qué extraño... Probaré lo de la configuración de redes de Windows, a ver. He estado alternando con Windows y Ubuntu por si el problema era de alguno de éstos, pero miraré lo que me has dicho.

Muchas gracias por tu ayuda!!
En línea

NathanD

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: Aplicación con sockets no funciona en LAN (sólo con localhost)
« Respuesta #7 en: 19 Noviembre 2013, 11:16 am »

Nada, no hay manera. Haciendo el Telnet sí, pero desde la aplicación de Servidor no. He mirado las configuraciones de redes de Windows, desactivado Firewall y Antivirus, y nada. He probado hasta a hacer un .jar de cada programa y ejectuarlo desde la consola de Windows por si el problema era Eclipse, pero tampoco.
« Última modificación: 19 Noviembre 2013, 11:23 am por NathanD » En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Aplicación con sockets no funciona en LAN (sólo con localhost)
« Respuesta #8 en: 19 Noviembre 2013, 11:49 am »

Nada, no hay manera. Haciendo el Telnet sí, pero desde la aplicación de Servidor no. He mirado las configuraciones de redes de Windows, desactivado Firewall y Antivirus, y nada.

Ya no se como ayudarte, al parecer el problema va más de java.
Insistiendo si es que que programaste algo mal, podrías probar esta biblioteca https://github.com/EsotericSoftware/kryonet (utiliza NIO). Y si con esto no funciona definitivamente problema de tu red.


Saludos!


En línea

NathanD

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: Aplicación con sockets no funciona en LAN (sólo con localhost)
« Respuesta #9 en: 19 Noviembre 2013, 12:11 pm »

Ya no se como ayudarte, al parecer el problema va más de java.
Insistiendo si es que que programaste algo mal, podrías probar esta biblioteca https://github.com/EsotericSoftware/kryonet (utiliza NIO). Y si con esto no funciona definitivamente problema de tu red.


Saludos!



No te preocupes, bastante me has ayudado ya. Miraré la biblioteca que me has puesto, gracias.
Luego probaré la aplicación en la universidad, a ver. De todas formas, si quisiera que la aplicación funcionara no sólo en una LAN sino en Internet (mi intención desde un principio), ¿tendría que hacer alguna modificación?

Muchas gracias por tu ayuda, un saludo.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines