Un socket es un puente de unión entre 2 programas a través de la red. Un servidor y un Cliente. Es decir, es el que se encarga de enviar y recibir la información.
La construcción de un socket se realiza de la siguiente manera (veremos varios constructores):
- Socket s=new Socket(): Crea un Socket por defecto y no conectado.
- Socket s=new Socket(InetAdrees direccion, int puerto): Crea y conecta un Socket a la IP especificada y el puerto especificado.
- Socket s=new Socket(String host, int puerto); Crea y conecta un Socket al host y al puerto especificados.
Bueno, estos 3 son los más utilizados, podéis mirar en la API para más info.
Los métodos más usados por esta clase son:
- void close(): Método que cierra el Socket.
- s.close();
- InetAddres getInetAddress(): método que retorna la IP a la cual esta conectado el socket.
- s.getInetAddress();
- InputStream getInputStream(): Método que nos devuelve un flujo de datos de entrada para el socket.
- s.getInputStream();
- OutputStream getOutputStream(): Método que devuelve un flujo de datos de salida para el socket.
- s.getoutputStream();
- int getPort(): Método que devuelve el puerto remoto al que esta conectado el socket.
- s.getPort();
- boolean isClosed(): Método que devuelve true si el socket está cerrado y false si no lo está.
- s.isClosed();
- boolean isConnected(): Método que devuelve true si el socket está conectado y false si no lo está.
- s.isConnected();
- void shutdownInput(): Método que cierra el flujo de entrada del socket.
- s.shutdownInput();
- void shutdownoutput(): Método que cierra el flujo de salida del socket.
- s.shutdownOutput();
- boolean isInputShutdown(): Método que devuelve true si el flujo de entrada está cerrado y false si no lo está.
- s.isinputShutdown();
- boolean isOutputShutdown(): Método que devuelve true si el flujo de salida está cerrado y false si no lo está.
- s.isOutputShutdown():
Bien, estos son unos pocos del total, pero son e los más utilizados. Si ninguno de estos se amolda a vuestras exigencias, podéis mirar en la API.
La clase ServerSocket es, digamos, como un complemento de la clase socket, esta se encarga de estar a la escucha para aceptar las conexiones entrantes.
Se construye de la siguiente manera:
- ServerSocket ss=new ServerSocket(): Constructor que crea un ServerSocket sin estar unido a nada.
- ServerSocket ss=new ServerSocket(int puerto): Constructor que crea un ServerSocket a la escucha del puerto indicado.
Los métodos que utiliza son los mismos que puede llegar a utilizar Socket a excepción de unos pocos, entre ellos el siguiente:
- Socket accept(): Método que acepta las conexiones entrantes en el servidor montado por ServerSocket.
- Socket s=ss.accept();
Teniendo estas 2 clases, el funcionamiento genérico sería:
- Tenemos un programa de escucha en un servidor y otro en un cliente.
- El servidor tiene un ServerSocket asociado a un socket con un puerto de escucha y está a la espera de una conexión.
- El cliente posee un socket con el "host" del equipo al que quiere mandar un proceso y el número de puerto al que está asociado dicho equipo.
- El servidor acepta la conexión entrante del cliente y realizan el intercambio de información.
- Una vez se termina el intercambio de información se cierran todos los canales y ServerSocket vuelve a quedar a la escucha de posibles conexiones.
Bien, como no quiero que me quede muy extenso el post, voy a realizar un chat de ejemplo explicando paso a paso todo lo explicado aquí para que pueda ser comprendido mejor. Puede ir al chat de ejemplo aquí.
Un saludo.
Como haría para crear un servidor que me permita enviar instancias de objetos a los distintos clientes? Necesito hacer un juego donde la información seleccionada por un cliente debe reflejarse en la pantalla de los demás.
ResponderEliminartan facil wn
Eliminar