ESPAÑOL: ¡Bienvenido! Es la página inicial de OSIRIS LMS. Regístrese hoy mismo y obtenga acceso a todos nuestros CURSOS GRATUITOS. Clic aquí para registrarse ya. Hemos desarrollado una amplia gamma de cursos “online” (Programación, Multimedia, 3D, Habilidades suaves, etc.), disponibles 24X7. Para más detalle consulte la lista de Cursos Disponibles. Si tiene problemas con el acceso a la plataforma, vea el Tour Virtual de Osiris LMS. También puede consultar la sección de FAQ’s o enviar Solicitud de Soporte Técnico.

ForoForo de discusión
Sockets en Java
Buscador:
Foro > JAVA > Sockets en Java

Enviado por: Texto del mensaje
Armando Morales
Nivel : Profesor
Mensajes : 26
> Perfil
Escrito el : Sábado 02-09-2006 A las : 00:49 ( > un mes )
Asunto : Sockets en Java
Los sockets son un sistema de comunicación entre procesos de diferentes máquinas en una red. Más específicamente, un socket es un punto de comunicación por el cual un proceso puede emitir o recibir información. Los sockets son capaces de utilizar el protocolo de streams TCP (Transfer Contro Protocol) y el de datagramas UDP (User Datagram Protocol).

Para entender el funcionamiento de los sockets no hay nada mejor que analizar un ejemplo. El que a continuación se presenta establece un pequeño diálogo entre un programa servidor y sus clientes, que intercambiarán cadenas de información.

Lo primero que vamos a hacer es crear el servidor. El programa servidor escucha en un puerto determinado, en espera de conexiones de los clientes. Cada vez que se presenta un cliente, le saluda y muestra su IP. Veamos el código fuente del servidor:

import java.io.* ;
import java.net.* ;
class Servidor {
static final int PUERTO=9999;
public Servidor( ) {
try {

// Crea el socket en un puerto determinado
ServerSocket servidor = new ServerSocket( PUERTO );
System.out.println("Socket corriendo en el pueto: " + PUERTO );

// Este socket atenderá peticiones continuamente.
while ( true ) {
Socket cliente = servidor.accept(); // Atiende la conexiones de los clientes
System.out.println("Estoy atendiendo conexiones del cliente con IP: " + cliente.getInetAddress().getHostAddress() );
OutputStream outStream = cliente.getOutputStream();
DataOutputStream flujo= new DataOutputStream( outStream ); // Se escribe el mensaje a enviar al cliente
flujo.writeUTF( "Hola cliente, tu IP es: " + " " + cliente.getInetAddress().getHostAddress() );
cliente.close(); // Cierra la conexión
}
} catch( Exception e ) {
System.out.println( e.getMessage() );
}
}
public static void main( String[] arg ) {
new Servidor();
}
}

El programa cliente se conecta a un servidor indicando el nombre de la máquina y el puerto en el que el servidor está corriendo. Una vez conectado, lee una cadena del servidor y la escribe en la pantalla:

import java.io.*;
import java.net.*;
class Cliente {
static final String HOST = "localhost";
static final int PUERTO=9999;
public Cliente( ) {
try{
// Establece la conexión con el socket
Socket cliente = new Socket( HOST , PUERTO );
InputStream inputStream = cliente.getInputStream();
DataInputStream flujo = new DataInputStream( inputStream ); // Lee el mensaje que envia el socket
System.out.println( flujo.readUTF() );
cliente.close();
} catch( Exception e ) {
System.out.println( e.getMessage() );
}
}
public static void main( String[] arg ) {
new Cliente();
}
}

Ejecución:
Aunque la ejecución de los sockets está diseñada para trabajar con ordenadores en red, para efectos de nuestro ejemplo podemos probar el correcto funcionamiento del programa de sockets en una misma máquina. Para esto primero vamos a correr el Servidor:

>java Servidor
Socket corriendo en el pueto: 9999


En otra ventana lanzaremos varias veces el programa cliente, obteniendo:

>java Cliente
Hola cliente tu IP es: 127.0.0.1


Obsérve que tanto el cliente como el servidor pueden leer o escribir del socket.
Profesor de Java
Osiris LMS
Amplía tus conocimientos en línea
 
 
Clayder Gonzalez
Nivel : Estudiante
Avatar
Mensajes : 20
> Perfil
Escrito el : Martes 26-09-2006 A las : 17:46 ( > un mes )
Asunto : Pregunta sobre sockets
Si yo ejecuto la clase Servidor, ésta podria escuchar a una la clase Cliente ejecutada desde otra maquina, o viceversa. Claro, usando las mismas clases antes implementadas, es decir, como pregunte anteriormente: este codigo sirve para que el Servidor corra en una maquina y el Cliente en otra?

Gracias.

Saludos
Clayder Gonzalez.
 
 
Armando Morales
Nivel : Profesor
Mensajes : 26
> Perfil
Escrito el : Martes 26-09-2006 A las : 18:48 ( > un mes )
Asunto : Re: Pregunta sobre sockets
Hola Clayder,

Efectivamente, como mencionas, trabajando con los sockets puedes tener corriendo el servidor en una maquina y uno o más clientes en diferentes maquinas. Lo único que tienes que hacer es cambiar en la clase Cliente la variable HOST por la IP o HOSTNAME donde esta corriendo el servidor.

Saludos
Profesor de Java
Osiris LMS
Amplía tus conocimientos en línea
 
 
Clayder Gonzalez
Nivel : Estudiante
Avatar
Mensajes : 20
> Perfil
Escrito el : Domingo 09-12-2007 A las : 05:23 ( > un mes )
Asunto : IPs y Java Sockets
Hola:

Recientemente estoy teniendo problemas con un pequeño programa que usa sockets de Java. Tengo dos clases una Servidor.java y una Cliente.java(parecido al ejemplo de arriba). En la clase Cliente.java al crear el socket le paso la IP del servidor, pero solo me funciona a nivel de mi red local, mejor dicho con las computadoras que estan conectadas en el mismo router que uso yo; cuando quiero probar con otras pcs ya no funciona.

Creo que el problema esta en las IPs, no se mucho de IPs, a ver si alguien me hecha una mano con este problema, agradeceria que me complementaran mi idea pobre de lo que es un ip, ya que hasta donde yo sé es la direccion que me permite comunicarme a traves del WWW, pero ¿¿¿solo existe una??? porque al visitar paginas del tipo "cual es mi ip", la direccion varía.

A ver si me aclaran estas ideas.

Gracias de antemano.

Saludos.
Clayder Gonzalez.