Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Droni en 28 Febrero 2015, 17:58 pm



Título: Ayuda con Socket en Java
Publicado por: Droni en 28 Febrero 2015, 17:58 pm
Hola, estoy haciendo un programa con Socket...se manejarlos, no perfectamente pero puedo programarlos para hacer un cliente/servidor que mande textos entre si perfectamente...Bueno la cosa es que ultimamente estoy haciendo un programa pero quiero saber siesque un Socket cliente se puede conectar a cualquier ip que capte...bueno para especificar mas:

Tengo un Servidor esperando la conexion de su Cliente..pero para que el Cliente se conecte al Servidor tengo que especificar la direccion ip del Servidor y su puerto, cuando es instanciado:

Socket miSocket = new Socket("DireccionIp", puerto);

la duda es si esque existe algun metodo para que el Socket obtenga la direccion del Servidor automaticamente o porlomenos un metodo que se conecte a cualquier direccion ip que detecte....
Existe esto???
en caso de no existir...existe alguna clase que permita obtener las IPs de los demas dispositivos conectados a la misma red? no me nombren programas porfavor ya conozco varios pero la idea es hacerlo todo en el mismo codigo...de ante mano muchas gracias :)

Mod: si esto es java, va en java


Título: Re: Ayuda con Socket en Java
Publicado por: engel lex en 28 Febrero 2015, 18:18 pm
intentalo por multicast o bradcast, es más fácil enviar un mensaje a todos y que un responsable responda a que preguntarle a cada uno


Título: Re: Ayuda con Socket en Java
Publicado por: Usuario Invitado en 28 Febrero 2015, 19:15 pm
Buenas tardes.

¿Por qué deseas hacer eso?. Me parece curioso porque normalmete cuando trabajamos con sockets declaramos la IP del servidor y su puerto como constantes porque serán fijos a no ser que se cambie manualmente el IP y el puerto.

¿Para qué necesitas escanear los equipos conectados en el cliente, si se supone que hay un solo servidor por lo que siempre tendras una IP a la cual conectarte?.

Saludos.


Título: Re: Ayuda con Socket en Java
Publicado por: Droni en 28 Febrero 2015, 19:38 pm
Buenas tardes.

¿Por qué deseas hacer eso?. Me parece curioso porque normalmete cuando trabajamos con sockets declaramos la IP del servidor y su puerto como constantes porque serán fijos a no ser que se cambie manualmente el IP y el puerto.

¿Para qué necesitas escanear los equipos conectados en el cliente, si se supone que hay un solo servidor por lo que siempre tendras una IP a la cual conectarte?.

Saludos.

Holaaa, muchas gracias por responder a todos, ya estoy viendo lo de los multi  cast.... Gus bueno te cito ati porque me preguntaste para que quiero hacerlo...pues bien... espero explicarme bien para que puedas entenderlo...

quiero hacer un programa Control Remoto para el pc... Controlandolo desde otro pc (despues sera controlar el pc desde android)...
la cosa es que yo no siempre estoy conectado a la misma red de wifi...por lo tanto no siempre tengo la misma IP en los dos dispositivos...por lo cual tendria que ver cual es la IP del Pc Servidor(el que sera controlado) pero quiero hacerlo sin tener que entrar al CMD de windows y poner ipconfig y ver la direccion ip....esto lo logro con InetAddress en el programa Servidor... ya logre obtener la IP pero al querer enviarla por un Socket hacia el cliente necesito tambien la IP del  PC Cliente entonces ahi esta el drama... tendria que dejar una IP constante que no serviria de nada porque como no siempre estoy en la misma red WIFI no seria constante...de modo que tendria que entrar al PC Servidor y ponerle manualmente la IP del PC Cliente... :/ y bueno ya veras es un drama....realmente nose si esque existe algun otro modo de hacer esto mas facil, aunque no es dificil como yo quiero hacerlo porque ya lo hize pero cuando cambio de wifi ya no sirve.

Por si no entendiste:
1.-El pc servidor obtendra su ip, y la enviara atravez de un Socket al pc cliente
2.-El pc cliente estara esperando que llege la ip del pc servidor atravez de ServerSocket para almacenarla en una variable String.

si te das cueta el necesitara mi ip para enviar atravez de un socket... y es por eso que busco algun metodo para obtener las ips de los dispositivos conectados a la red...para automatizar al programa que pruebe uno por uno....
espero haberme explicado de la mejor manera :) muchas gracias


Título: Re: Ayuda con Socket en Java
Publicado por: engel lex en 28 Febrero 2015, 20:04 pm
pero si no estás en la misma red wifi todo está mal...

Citar
El pc servidor obtendra su ip, y la enviara atravez de un Socket al pc cliente

como la va a enviar si no conoce la ip del cliente?

para eso se usa no-ip, así evitas el cambio de ip, y debes en donde está el ordenador controlado, abrir los puertos por donde te conectarás, le configuras noip y listo, de resto lo que intentas, me parece locura... menos más que Gus Garsaky preguntó jejeje


Título: Re: Ayuda con Socket en Java
Publicado por: Droni en 28 Febrero 2015, 20:29 pm
pero si no estás en la misma red wifi todo está mal...

como la va a enviar si no conoce la ip del cliente?

para eso se usa no-ip, así evitas el cambio de ip, y debes en donde está el ordenador controlado, abrir los puertos por donde te conectarás, le configuras noip y listo, de resto lo que intentas, me parece locura... menos más que Gus Garsaky preguntó jejeje

holaa y nnono tu me malinterpretaste...los programas si estaran conectados a la misma red wifi pero lo que me refiero es que no siempre sera la misma red entiendes? por ejemplo ahora los dos programas estan conectados a la red de mi casa y para probar el programa en la casa de un amigo los programas estaran conectados al wifi de la casa de mi amigo entiendes??? y claro obvio que en la casa de mi amigo las ips son distintas


Título: Re: Ayuda con Socket en Java
Publicado por: engel lex en 28 Febrero 2015, 20:32 pm
ambos siempre compartiran lan?


Título: Re: Ayuda con Socket en Java
Publicado por: Droni en 28 Febrero 2015, 20:37 pm
ambos siempre compartiran lan?

exacto! :)


Título: Re: Ayuda con Socket en Java
Publicado por: Usuario Invitado en 28 Febrero 2015, 20:56 pm
  • Hacer un ping a tu LAN para saber qué equipos están conectados.
  • Obtener el nombre del equipo (getCanonicalName()).
  • Retornar la IP del equipo que coincide con X nombre.

El servidor tendrá un nombre fijo. Los clientes, hacen un ping a LAN donde se va iterando entre todos los dispositivos conectados hasta que haya una concordancia con el nombre del servidor, en éste caso, se devuelve la IP.

Solo tendrías que buscar como hacer el ping a tu LAN. Esto te puede servir: Discover any device in LAN (http://stackoverflow.com/questions/13198669/any-way-to-discover-android-devices-on-your-network)

Salu2.


Título: Re: Ayuda con Socket en Java
Publicado por: engel lex en 28 Febrero 2015, 21:01 pm
Gus Garsaky sigo creyendo que es mejor el multicast... es mucho trabajo escanear una lan (que no sabes que tan grande es)... es más facil tirar un solo paquete que llegue a todos los dispositivos conectados y que el servidor responda a la ip que tiró la peticion (un unicast normal a la ip) no necesitaría averiguar la ip, ya que solo tiene que leer el remote address


Título: Re: Ayuda con Socket en Java
Publicado por: Usuario Invitado en 28 Febrero 2015, 21:13 pm
Hmm, ahora que lo analizo bien, quizás sí, un multicast sería mucho más sencillo y práctico. +1 para multicast.

PD: Droni, si no sabes qué es un multicast, puedes ver un ejemplo aquí (http://chuwiki.chuidiang.org/index.php?title=Socket_multicast_en_java).


Título: Re: Ayuda con Socket en Java
Publicado por: Droni en 28 Febrero 2015, 21:15 pm
gus y engel muchas gracias a los dos! muy buenas respuestas y la verdad muy rapidas :) voy a comenzar a probar el metodo del ping y tambien el del multicast que tambien me intereso ;)

por ultimo gus...

-Obtener el nombre del equipo (getCanonicalName())

eso se aplica en el servidor o en el cliente??


Título: Re: Ayuda con Socket en Java
Publicado por: Usuario Invitado en 28 Febrero 2015, 21:27 pm
Se aplica en el cliente. En el enlace que puse verás el código completo. Pero quizás el multicast sea o es la mejor opción. Ten en cuenta eso.


Título: Re: Ayuda con Socket en Java
Publicado por: Droni en 28 Febrero 2015, 21:31 pm
ok muchas muchas gracias :) nose si en este foro se puedan dar puntos o algo? esque soy nuevo :) de cualquier manera me gusto mucho el foro intentare crear el programa con los dos para ver cual me resulta mejor en mi caso :) MUCHAS GRACIAS :)


Título: Re: Ayuda con Socket en Java
Publicado por: engel lex en 28 Febrero 2015, 21:41 pm
es un foro abierto, para discutir problemas, no hay puntos, no hay valoraciones, lo único que importan son las opiniones ;)