Ayuda con Socket en Java

Iniciado por Droni, 28 Febrero 2015, 17:58 PM

0 Miembros y 1 Visitante están viendo este tema.

Droni

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

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Usuario Invitado

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.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

Droni

Cita de: Gus Garsaky 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.

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

engel lex

pero si no estás en la misma red wifi todo está mal...

CitarEl 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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Droni

Cita de: engel lex en 28 Febrero 2015, 20:04 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

engel lex

ambos siempre compartiran lan?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.


Usuario Invitado

  • 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

    Salu2.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.