Autor
|
Tema: Aplicación con sockets no funciona en LAN (sólo con localhost) (Leído 7,017 veces)
|
NathanD
Desconectado
Mensajes: 48
|
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: java.net.ConnectException: Connection refused: connect Os dejo los fuentes. Cliente: import java.io.DataInputStream; import java.io.InputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class Cliente { //Constantes final int PUERTO = 7000; //final String HOST = "192.168.1.36"; /************/ //Métodos - constructor public Cliente(){ try{ skCliente = new Socket(address, PUERTO ); System. out. println(flujo. readUTF()); skCliente.close(); System. out. println("Error en la conexión." ); } } //Cuerpo del programa public static void main (String[] args ){ new Cliente(); } }
Servidor: import java.io.DataOutputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; public class Servidor { //Constantes final int MAX_CLIENTES = 5; final int PUERTO = 7000; /************/ //Métodos - constructor public Servidor(){ try { System. out. println("Escucho el puerto: "+PUERTO ); for(int numCli = 0; numCli < MAX_CLIENTES; numCli++){ Socket skCliente = skServidor. accept(); System. out. println("\tSirvo al cliente: "+skCliente. getRemoteSocketAddress()); flujo.writeUTF("\nHola cliente "+ skCliente.getRemoteSocketAddress()); skCliente.close(); } System. out. println("Error en la conexión." ); } // TODO Auto-generated catch block } } public static void main (String[] args ){ new Servidor(); } }
Gracias de antemano y saludos.
|
|
|
En línea
|
|
|
|
egyware
|
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
Mensajes: 48
|
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: 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
|
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í o
|
|
|
En línea
|
|
|
|
NathanD
Desconectado
Mensajes: 48
|
La excepción me salta en el Cliente. Ya consigo hacer el Telnet desde un ordenador distinto, que es un paso 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
|
Funciona impecable try{ skCliente = new Socket(address, PUERTO ); System. out. println(flujo. readUTF()); skCliente.close(); e.printStackTrace(); System. out. println("Error en la conexión." ); e.printStackTrace(); }
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
Mensajes: 48
|
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
Mensajes: 48
|
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
|
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
Mensajes: 48
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
porq aplicacion solo funciona con framework 3.5?
.NET (C#, VB.NET, ASP)
|
llBrandoll
|
5
|
5,411
|
10 Septiembre 2010, 04:11 am
por rob1104
|
|
|
[Problema] Tengo una web que en localhost funciona barbaro, pero en un servid...
Desarrollo Web
|
astinx
|
2
|
4,357
|
22 Diciembre 2011, 23:20 pm
por astinx
|
|
|
Pregunta: Como funciona una aplicacion que genera otra aplicacion?
Programación C/C++
|
inGnio
|
2
|
3,445
|
18 Octubre 2012, 04:48 am
por x64core
|
|
|
[mod_rewrite] Esta regla no me funciona en linea, pero en localhost si !
PHP
|
Diabliyo
|
3
|
2,558
|
27 Julio 2013, 19:23 pm
por el-brujo
|
|
|
Wireshark solo captura localhost
Hacking Wireless
|
daviddavo
|
7
|
6,642
|
29 Enero 2015, 07:20 am
por engel lex
|
|