viernes, 6 de febrero de 2009

El uso de los socket

El objetivo de este artículo es introducirlo a la programación orientada a las redes con el uso de los socket, en especifico trataremos dicho tema orientado al lenguaje de programación de alto nivel JAVA, que consta de una muy cómoda implementación de la clase socket además de grandes facilidades para su manejo.

Las clases de java que implementan los socket son:
java.net.Socket
java.net.SocketServer

java.net.Socket nos permite establecer un socker en el cliente y establecer una conexión con un socket servidor.
java.net.SocketServer sirve para establecer un socket en un servidor y escuchar las peticiones de soket clientes.

Trabajar con un socket cliente requiere varios pasos:
1- Abrir el socket utilizando uno de sus constructores, estableciendo la ip y puerto de destino.
2- Abrir los stream de entrada y salida mediante los métodos getInputStream() y getOutputStream().
3- Enviar y recibir los datos que deseemos procesar en nuestra aplicación utilizando los métodos definidos por nosotros en dependencia de la problemática.
4- Y por ultimo cerrar los stream mediante el método close()
5- Y cerrar los socket mediante el método close()

Los atributos con los que cuenta la clase socket son:
getLocalPort(): Devuelve el puerto origen (local).
getInetAddress(): Devuelve la dirección destino (remota).
getPort(): Devuelve el puerto destino (remoto).
getLocalAddress(): Devuelve la dirección origen (local).

Ejemplo:

import java.io.*;
import java.net.*;
public class EchoClient
{
public static void main(String[] args)
{
try
{
Socket clientSocket = new Socket("192.168.1.2",1234);
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),true);
BufferedReader in = new BufferedReader(new InputStreamReader
(clientSocket.getInputStream()));
System.out.println("Enviando: ¡¡¡¡Ecooo!!!!");
out.println("¡¡¡¡Ecooo!!!!");
System.out.println("Recibiendo: " + in.readLine());
out.close();
in.close();
clientSocket.close();
}
catch (UnknownHostException e) { }
catch (IOException e) { }
}
}

Trabajar con un socket servidor requiere varios pasos:
1-Abrir el socket: mediante uno de sus constructores, habitualmente dándole el puerto donde escuchar.
2- Enviar y recibir los datos que deseemos procesar en nuestra aplicación utilizando los métodos definidos por nosotros en dependencia de la problemática.
4- Cerrar los streams: mediante el método close().
5- Cerrar el socket: mediante el método close().

Ejemplo:

import java.io.*;
import java.net.*;
public class EchoServer
{
public static void main(String[] args)
{
try
{
ServerSocket serverSocket = new ServerSocket(1234);
Socket clientSocket = serverSocket.accept();
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader
(clientSocket.getInputStream()));
String inputLine = in.readLine();
System.out.println("Recibiendo: " + inputLine);
String outputLine = inputLine.toUpperCase();
System.out.println("Enviando: " + outputLine);
out.println(outputLine);
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
catch(IOException ex) { }
}
}

3 comentarios:

  1. Jeandy tu articulo esta muy bueno.
    Hace tiempo que vengo trabajando con un cliente telnet en vb.net con una libreria "paga" que tiene ciertas limitaciones para lo que necesito. Asi que decidi hacer mi propio script, al principio en C# (.net) pero me cambie a java luego de que varios de mis servidores windows se infectaran.
    Tu articulo es una muy buena guia para quienes se inician en la programacion de sockets.
    Saludos cordiales.
    Nicolás S. Echandi

    ResponderEliminar
  2. Los socket para mi es algo fascinante, me enorgullece mucho que sea de utilidad mi artículo, si necitas algún tipo de ayuda o cooperación en estos temas puedes contar conmigo sin ningún tipo de problema.
    Gracias

    ResponderEliminar
  3. Jeandy
    Como estas capo? todo bien? Espero que si man...
    Queria contarte que publique un articulo sobre sockets en java. Lo puse en el blog de un amigo que se llama leyendoelcodigo.blogspot.
    No intenta competir con el tuyo, simplemente es mi solucion, que tampoco es perfecta.
    Estoy esperando un nuevo post de tu parte. Siempre salis con temas muy interesantes.
    Un abrazo.
    Nicolás Echandi

    ResponderEliminar