Ya sabiamos que JAVA es un lenguaje poderoso y sobre todo muy fácil a la hora de implementar ciertas librerias como es el caso, pasare a explicar como es que yo realizo conexiones de tipo cliente-servidor por ejemplo para un chat, transferencias, etc. Lo primero es hacer dos clases separadas, la que jugará el rol de Cliente y la que lo hará como Servidor. Definamos primero
la clase servidor en conjunto con unos streams para comunicar datos (texto) entre las clases.
//Importar librerias, lo cual debe hacerse independientemente no como esta aqui
import java.net.*;
import java.io.*;
//se define la clase
public class Servidor {
//objeto fundamental que abrira el puerto
private ServerSocket servsock;
//socket el cual aceptara conexiones
private Socket sock;
//stream para enviar datos, ojo solo enviar!
private ObjectOutputStream oos;
//instanciar componentes en el constructor
public Servidor() {
//le pasamos como aprametro el numero de puerto que usaremos, verificar que este libre
servsock = new ServerSocket(8033);
//le decimos que acepte conexiones, por el puerto definido
sock = servsock.accept();
//configuramos el stream listo para enviar
oos = new ObjectOutputStream(sock.getOutputStream());
}
}
Básicamente esos son los componentes del Servidor, el stream no es necesario es solo por si deseamos una comunicacion entre el cliente y nuestro servidor, y en este caso soolo basta un oos.writeObject(Object) para mandar datos por el stream. Cabe destacar que el metodo accept() de alguna manera detiene la ejecución del programa y se reanuda hasta que un cliente se conecte al servidor, por esto si vamos a hacer otras cosas en el server (que lo mas seguro es que si) es mejor implementar ese código en un hilo y que corra aparte de nuestro programa. Por otro lado la clase cliente es más sencilla, veamos:
//importamos las librerias
import java.net.Socket;
import java.io.ObjectInputStream;
public class Cliente {
//socket por el cual comunicarse
private Socket sock;
//Stream para recibir datos, en este caso solo recibe el cliente
private ObjectInputStream ois;
//En el constructor instanciamos los componentes
public Cliente() {
//este socket no acepta conexion sino que se conectará a la IP que se le pase como primer parámetro
//y el puerto va como segundo parametro, la IP es la del servidor bien puede ser "localhost"
sock = new Socket("154.43.34.123", 8033)
//enlazamos el stream por el que vienen datos
ois = new ObjectInputStream(socket.getInputStream());
}
}
De esta manera en un hilo puede estarse verificando cuando llegue algo por el stream con un "ois.readObject()" y sobre el socket pues en este caso no acepta conexión si no que se va a conectar, se le pasa la IP en una string o si es local será "localhost" y despues el numero de puerto en el que el servidor esta a la escucha. Asi de fácil, así de sencillo, obviamente esos codigos no hacen nada por si solos pero esa es la idea, y de alli podemos implementarlo en un chat por ejemplo.
PD: Siempre que trabajemos con streams es necesario escribir el código en un try/catch por que en caso de error llegan a lanzar excepciones.
No hay comentarios:
Publicar un comentario
Deja un comentario! =)