Está en la página 1de 15

Sockets

Sockets 1 Introduccin

Los URL y las conexiones URL (URLConnection) proporcionan un mecanismo de un nivel relativamente alto (nivel 7 del modelo OSI) para acceder a los recursos de Internet. Algunas veces, los programas requieren una comunicacin a travs de la red, a un nivel un poco ms bajo; por ejemplo, cuando se desea escribir una aplicacin cliente / servidor. Para este tipo de programas, se utilizan las clases Socket y ServerSocket, del paquete java.net, que trabajan en los niveles 3 y 4 del modelo OSI. En las aplicaciones cliente / servidor, el servidor proporciona algn servicio, como por ejemplo: procesamiento de consultas a una base de datos o transmitir los precios actuales de inventario. El cliente utiliza el servicio proporcionado por el servidor, ya sea desplegando los datos de la consulta a la base de datos o haciendo recomendaciones de compra a un inversionista, teniendo en cuenta los precios del inventario. La comunicacin entre cliente y servidor debe ser confiable; esto quiere decir que no se pueden perder datos, y que stos deben llegar al cliente en el mismo orden en el cual fueron enviados por el servidor; por esta razn se utiliza TCP/IP. TCP proporciona un canal de comunicacin confiable, punto a punto, que las aplicaciones cliente / servidor utilizan para comunicarse entre ellas a travs de Internet. Para comunicarse a travs de TCP, se establece una conexin entre el programa cliente y el programa servidor. Cada programa enlaza un socket en su extremo de la conexin. Para comunicarse, cliente y servidor leen y escriben hacia el socket asociado a la conexin. Cuando se escribe la parte del programa correspondiente al servidor, se abre un conector (socket), normalmente utilizando un nmero de puerto conocido, y se espera a que se conecte algn cliente. El cliente llama desde algn nmero de puerto no utilizado (conocido como puerto efmero). En cuanto se conectan el cliente y el servidor, es corriente que ste ltimo proponga que la conversacin contine en un puerto diferente. Este diseo deja libre el nmero de puerto conocido, para manejar una nueva conexin. Una vez conectados el cliente y el servidor, hay un protocolo de ms alto nivel que es dependiente del puerto que se est utilizando. TCP/IP reserva los prim eros 1024 puertos para sus protocolos especficos. La siguiente tabla muestra algunos nmeros de puerto conocidos. Estos servicios se ofrecen tanto en puertos TCP como en puertos UDP.

Pgina 1

Algoritmos y Lenguajes III

Sockets

Nombre del servicio echo discard daytime chargen chargen time

Puerto Puerto Descripcin TCP UDP 7 7 El servidor devuelve lo que enva el cliente 9 9 El servidor descarta lo que enva el cliente 13 13 El servidor devuelve la fecha y la hora en un formato legible 19 El servidor TCP enva un flujo continuo de caracteres hasta que el cliente termina la conexin 19 El servidor UDP enva un datagrama, cada vez que lo hace el cliente, que contiene un nmero aleatorio de caracteres. 37 37 El servidor devuelve la hora como un nmero binario de 32-bits, el nmero de segundos desde la media noche del 1 de enero de 1.900, UTC
Tabla 1. Puertos Bien Conocidos

En TCP/IP, el puerto 21 es para FTP, el 23 para Telnet, el 25 para e -mail, el 79 para finger, el 80 para HTTP, el 119 para netnews. Cada protocolo debe determinar cmo debe dialogar un cliente con el puerto.

Qu es un Socket?
Un socket es un conector de red.

Un conector de red es similar a un conector elctrico. Hay distintos enchufes en la red elctrica que tienen una forma estndar de entregar la energa. Cualquier cosa que entienda el protocolo estndar puede enchufarse al conector y enviar informacin. En los enchufes elctricos no importa si se conecta una lmpara o un tostador, ya que siempre que trabajen con el voltaje adecuado, ambos funcionarn correctamente. Pensemos cmo se crea la factura del servicio de energa elctrica: En algn lugar entre su casa y la red elctrica hay un contador. Cada kilovatio que pasa a travs del contador se queda registrado y peridicamente la factura llega a nuestra direccin. Por eso, aunque la electricidad fluya libremente a travs de la red, todos los conectores de la casa tienen una direccin particular. De la misma forma funcionan los conectores de la red, excepto en que en lugar de electrones y de calles se trabaja con paquetes TCP/IP y direcciones IP. La nocin de conector permite a un nico computador atender a diferentes clientes a la vez, adems de proporcionar diferentes tipos de informacin. Esto se consigue utilizando lo que se conoce com o puerto, que es un conector numerado en una mquina particular. Se dice que un proceso servidor "escucha en un puerto hasta que un cliente se conecta a l. Un servidor puede aceptar mltiples clientes conectados todos ellos por el mismo nmero de puerto, aunque cada sesin es nica. Para gestionar las conexiones de varios clientes, el proceso servidor debe ser un proceso multihilo o disponer de otros mecanismo para manejar las E/S simultneas.

Pgina 2

Algoritmos y Lenguajes III

Sockets

Normalmente, un servidor se ejecuta en un computador especfico y tiene un socket enlazado a un nmero especfico de puerto. El servidor slo espera, escuchando en el socket, hasta que el cliente realice una solicitud de conexin. En el lado del cliente: El cliente conoce el nombre de host de la mquina en la cual se est ejecutando el servidor, y el nmero de puerto en el cual se encuentra conectado el servidor. Para realizar la solicitud de conexin, el cliente trata de reunirse con el servidor utilizando el nombre del computador donde est se est ejecutando y el nmero de puerto.

Figura 1. Solicitud de Conexin

Si todo funciona adecuadamente, el servidor acepta la conexin. Durante la aceptacin, el servidor obtiene un socket enlazado a un puerto diferente. Requiere un nuevo socket (y por tanto un nuevo puerto), para poder continuar escuchando en el socket original por otras solicitudes de conexin, mientras atiende las solicitudes del cliente conectado.

Figura 2. Establecimiento de la Conexin

En el lado del cliente, si la conexin es aceptada, se crea un socket, que puede ser utilizado para comunicarse con el servidor. El socket en el lado del cliente no se enlaza al nmero de puerto utilizado para establecer la conexin con el servidor. En lugar de esto, al cliente se le asigna un nmero de puerto local, en la mquina en la cual se est ejecutando. Ahora el cliente y el servidor pueden comunicarse, escribiendo o leyendo en sus respectivos sockets. Definicin: Un socket es el extremo de un enlace de comunicacin de dos-vas entre dos programas que se ejecutan en la red. Un socket se asocia a un nmero de puerto, para que TCP pueda identificar la aplicacin a la cual se estn enviando los datos.

Pgina 3

Algoritmos y Lenguajes III

Sockets

Manejo de Sockets en Java

Un objeto socket es la representacin Java de una conexin de red TCP (Ver Figura). Utilizando esta clase, un cliente puede establecer un canal de comunicacin basado en flujos de datos, con un computador remoto.

Socket host:port
TCP IP IP TCP

host

port HTTP

Figura 3. Conexin TCP/IP usando Sockets

Para comunicarse con un host remoto, el cliente debe crear primero un Socket hacia ese host. Esto automticamente establece una conexin TCP, lanzando una excepcin, si la conexin falla. Adems del nombre de host, es necesario especificar un puerto; ste es un entero entre 1 y 65.535. Efectivamente, hay 65.535 direcciones diferentes en cada host. Para conectarse a un host, es necesario especificar su direccin IP. Debe haber un servidor escuchando activamente en el puerto especificado, o el intento de conexin fallar. Java proporciona dos tipos de soc kets: los de cliente, implementados en la clase Socket, y los de servidor, implementados en la clase ServerSocket. La clase Socket esconde los detalles de implementacin de cualquier sistema, al programa Java. Utilizando la clase java.net.Socket los programas Java se pueden comunicar a travs de la red, en una forma independiente de la plataforma. La clase Socket est diseada para conectarse a un servidor y es la que inicia el protocolo de intercambio. La clase ServerSocket, implementa un socket que el servidor puede utilizar para escuchar y aceptar las conexiones con los clientes. La clase ServerSocket est diseada para escuchar y esperar hasta que los clientes se conecten, para inmediatamente despus empezar a prestarles el servicio solicitado.

Es importante tener en cuenta que si se est tratando de establecer una conexin al Web, la clase URL y sus clases asociadas (URLConnection, URLEncoder) son probablemente ms apropiadas que las clases relacionadas con los sockets. De hecho, un URL es una conexin de alto nivel al Web, y utilizan los sockets como parte de su implementacin interna.

Pgina 4

Algoritmos y Lenguajes III

Sockets

Clase Socket (Conectores TCP/IP para clientes)

Para conectarse a un host, el programa cliente tiene que incluir una lnea como: Socket conexin = new Socket (hostname, portNumber); Si se presenta algn problema, el constructor Socket lanza una IOException. De lo contrario, se puede suponer que el Socket est abierto y preparado para la comunicacin: BufferedReader lector = new BufferedReader ( new InputStreamReader (conexin.getInputStream())); BufferedWriter escritor = new BufferedWriter ( new OutputStreamWriter (conexin.getOutputStream())); Ahora se puede leer y escribir utilizando los flujos lector y escritor de la forma habitual. Al finalizar el intercambio de datos, debe ejecutarse la instruccin: conexin.close(); La cual cierra la conexin y a la vez cierra todos los streams, readers y writers asociados a este Socket.

2 Restricciones de seguridad en los Applets: La mayor parte de los navegadores


incluyen un SecurityManager, que informa de una SecurityException cuando se intenta establecer una conexin TCP/IP con un host distinto a aquel de donde se descarg el applet. Para hacer que este cdigo funcione en un applet, o se autolimita para conectarse slamente al servidor propio del applet, o se negocian ms derechos con el SecurityManager del navegador.

4.1

Constructores

Al crear un socket, se crea automticamente una conexin a un computador y un puerto especficos. Debe haber un servidor escuchando en el puerto del host; de lo contrario, se lanza una excepcin de tipo IOException (Conexin rechazada). Otros posibles errores resultan de fallas en la red o nombres de hosts desconocidos. Socket (String host, int port) throws IOException

Esto crea un socket y lo conecta al puerto ( port) especificado, del computador ( host) especificado. El host se especifica mediante un nombre (DNS) o por una direccin IP; el puerto debe estar en el rango 1-65535. Socket (InetAddress address, int port) throws IOException

Esto crea un socket y se conecta al puerto y host especificados. La diferencia con el constructor anterior es que la identidad del host no se especifica utilizando un String, sino un objeto InetAddress que lo referencie. El puerto debe estar en el rango 1-65535.

Pgina 5

Algoritmos y Lenguajes III

Sockets

Socket (String host, int port, InetAddress localAddr, int localPort) throws IOException

Esto crea un socket, lo une a la direccin y puerto locales, y lo conecta al host y puerto remotos. Si localAddress es null, se utiliza la direccin local por defecto. Si localPort es 0 (cero), se utiliza un puerto aleatorio, de los que se encuentren desocupados. En efecto, cada conexin TCP consiste de una direccin local y una remota, y un puerto local y uno remoto. Cuando se crea un socket y se conecta aun host remoto, generalmente se le asigna un nmero de puerto aleatorio, de los que se encuentren desocupados. Este constructor permite especificar la direccin y el puerto local, lo cual puede ser til en algunas ocasiones, para conectarse a servidores que requieren una conexin desde un puerto particular o donde es requerido por un firewall. Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException

Esto crea un socket, lo une a la direccin y puerto locales (localAddr y localPort), y lo conecta al host y puerto remotos (address, port). Si localAddr es null, se utiliza la direccin local por defecto. Si localPort es 0 (cero), se utiliza un puerto aleatorio, de los que se encuentren desocupados. protected Socket( )

Este constructor crea un objeto Socket sin conectar. Este socket puede unirse posteriormente a una conexin entrante, por medio de un ServerSocket. Debe tenerse en cuenta que este constructor slo puede ser llamado por una subclase com o parte de una estructura socket personalizada (custom socket framework). protected Socket(SocketImpl impl)

Este constructor slo se puede utilizar para proporcionar una implementacin socket personalizada, lo cual no se va a manejar en este curso.

4.2

Mtodos

Los mtodos de la clase Socket permiten la identificacin del host remoto, y de los nmeros de puerto local y remoto, al igual que la extraccin de flujos para propsitos de comunicacin bidireccional. Para realizar comunicaciones a travs de una conexin TCP, primero debe crearse un socket y luego utilizar los mtodos getInputStream() y getOutputStream() para obtener los flujos con los cuales comunicarse al servidor remoto. En consecuencia, tanto el cliente como el servidor tendrn un InputStream y un OutputStream, para propsitos de comunicacin.

Pgina 6

Algoritmos y Lenguajes III

Sockets

InputStream getInputStream( ) throws IOException

Este mtodo devuelve un flujo de tipo InputStream, que permite comunicaciones basadas en flujos a travs de una conexin TCP. Todos los datos escritos por el servidor en el extremo remoto de la conexin, deben ser ledos por este flujo de entrada. Los datos escritos a un socket se segmentan en paquetes, para la comunicacin a travs de IP. Para la aplicacin, sin embargo, la conexin proporciona un flujo continuo de datos. Por razones de eficiencia, los flujos Socket deben utilizar un buffer. OutputStream getOutputStream( ) throws IOException

Este mtodo devuelve un OutputStream que permite comunicaciones basadas en flujos, a travs de una conexin TCP. Todos los datos escritos hacia este flujo deben ser ledos por el servidor en el extremo remoto de la conexin. Por razones de eficiencia, con este flujo de salida deben utilizarse buffers; de lo contrario, el primer byte de un mensaje frecuentemente ser enviado en un paquete independiente, desperdiciando ancho de banda. void close( ) throws IOException

Este mtodo cierra el socket, liberando cualquier tipo de recursos de la red y del sistema que estn siendo utilizados. Cualquier dato enviado antes de este llamado, se entregar exitosamente en el otro extremo de la conexin, a menos que exista una falla en la red. Hay que tener en cuenta que si con el flujo de salida del socket se ha utilizado un BufferedOutputStream, este debe cerrarse antes que el socket. De lo contrario, los datos que permanezcan en el buffer se perdern. Cerrar el flujo de salida o el de entrada de un Socket, cerrar la conexin de red; por tanto, slo es necesario cerrar el socket, su InputStream y su OutputStream. No existe un forma de cerrar el socket parcialmente. InetAddress getInetAddress( )

Este mtodo devuelve la direccin IP del host remoto. int getPort( )

Este mtodo devuelve el nmero del puerto del host remoto al cual se encuentra conectado el socket. InetAddress getLocalAddress( )

Este mtodo devuelve la direccin local a la cual se encuentra unido el socket; es decir, la interfaz IP local a travs de la cual se estn enviando los paquetes. int getLocalPort( )

Este mtodo devuelve nmero de puerto local al cual se encuentra unido el socket. Este valor se asigna de forma aleatoria, si no se especifica un puerto en el constructor.

Pgina 7

Algoritmos y Lenguajes III

Sockets

void setSoTimeout(int timeout) throws SocketException

Este mtodo establece un time-out en milisegundos, despus del cual una operacin de lectura (blocking read operation) en este socket , se suspender automticamente. Un valor de cero(0), deshabilita el time-out, de modo que las operaciones se bloquean indefinidamente. Este mtodo es til si se desea esperar slo una cantidad especfica de tiempo, para que el cliente responda a ciertos datos. Si una llamada a read() alcanza el timeout, se lanza una InterruptedException. int getSoTimeout( ) throws SocketException

Este mtodo devuelve el valor actual de time-out del socket. Un valor de cero(0) indica que no hay time-out, o sea, que cualquier operacin del socket, se bloquea indefinidamente (el valor por defecto). void setSendBufferSize(int size) throws SocketException

Este mtodo solicita que el sistema operativo establezca el tamao de buffer para envo del socket (SO_SNDBUF) en el valor especificado (size). El aumento del tamao del buffer, puede aumentar el desempeo para el envo de grandes volmenes de datos. El sistema operativo puede ignorar el valor que se solicite. int getSendBufferSize( ) throws SocketException

Este mtodo devuelve el tamao actual del buffer de envo del socket. void setReceiveBufferSize(int size) throws SocketException

Este mtodo solicita que el sistema operativo establezca el tamao de buffer para recepcin del socket (SO_RCVBUF) en el valor especificado (size). El aumento del tamao del buffer, puede aumentar el desempeo para la recepcin de grandes volmenes de datos. El sistema operativo puede ignorar el valor que se solicite. int getReceiveBufferSize( ) throws SocketException

Este mtodo devuelve el tamao actual del buffer de recepcin del socket. static void setSocketImplFactory(SocketImplFactory factory) throws IOException

Este mtodo esttico puede utilizarse para instalar una implementacin socket personalizada para toda la JVM (Java Virtual Machine). Este mtodo slo puede llamarse una vez, y es vetado por el SecurityManager. 4.3 Excepciones IOException

Muchos de los mtodos y constructores de la clase Socket pueden lanzar una IOException, si se encuentra un error.

Pgina 8

Algoritmos y Lenguajes III

Sockets

SocketException

Esta IOException es una superclase de algunas excepciones comunes de los sockets, que permiten un manejo ms detallado de las excepciones de red. Las subclases son: BindException

Esta SocketException indica que la direccin o puerto solicitados no se pudieron enlazar al socket. Generalmente esto ocurre cuando el puerto ya est en uso o es un puerto del sistema, o cuando la direccin local especificada no es una interfaz local de red vlida. ConnectException

Esta SocketException indica que el intento de conexin fue rechazado debido a que no hay un servidor escuchando en el puerto especificado de la mquina remota. NoRouteToHostException

Esta SocketException indica que el host remoto no pudo alcanzarse, generalmente, debido a un problema en la red o a la presencia de un firewall.

SecurityException

El SecurityManager restringe la creacin de sockets. Los applets no confiables, por ejemplo, no pueden abrir sockets hacia sitios diferentes a aquel en el cual residen. Otra restriccin significativa es que un applet detrs de un firewall es posible que no pueda hacer uso del servicio de DNS, por lo cual es necesario utilizar las direccin IP del computador receptor, en lugar de su nombre de host.

Ejemplo1: Whois

El siguiente ejemplo abre una conexin con un puerto whois (43) del servidor InterNIC, enva el argumento de la lnea de comandos por el conector e imprime el dato recibido. InterNIC intentar determinar el nombre de dominio Internet del argumento que recibe y despus devuelve la direccin IP e informacin de ese sitio.
import java.io.*; import java.net.*; public class Whois { public static void main(java.lang.String[] args) throws Exception { int c; Socket s = new Socket ("internic.net", 43); InputStream in = s.getInputStream() ; OutputStream out = s.getOutputStream() ; String str = (args.length==0 ? "starwave.com":args[0])+"\n"; byte buf[] = new byte[str.length()];

Pgina 9

Algoritmos y Lenguajes III

Sockets

str.getBytes (0,str.length(),buf,0); out.write (buf); while ((c=in.read())!=-1) { System.out.print ((char)c); } s.close (); } }

La salida cuando no se envan parmetros al programa es:

Si, por ejemplo, se introduce sportszone.com, como argumento en la lnea de comandos, se obtendr la siguiente salida:

Pgina 10

Algoritmos y Lenguajes III

Sockets

La Clase ServerSocket (Conectores TCP/IP para servidores)

Como se ha mencionado antes, Java tiene una clase de conector diferente que se debe utilizar para crear aplicaciones servidoras. La clase ServerSocket se utiliza para crear servidores que escuchan tanto a programas clientes locales como remotos que se conectan a ellos a travs de puertos conocidos. Los objetos ServerSocket son bastante diferentes de los objetos Socket normales. Cuando se crea un ServerSocket, ste se registra en el sistema q ue tiene inters en recibir las conexiones de los cliente clientes.

6.1

Constructores

Los dos constructores de ServerSocket reflejan el nmero del puerto en el que se desean aceptar las conexiones y, opcionalmente, durante cunto tiempo se desea esperar a que se deje de utilizar el puerto. La longitud de la cola le indica al sistema cuntas conexiones de clientes puede dejar pendientes antes de que las conexiones sean rechazadas. Por defecto este valor es 50. Ambos constructores pueden lanzar una IOException bajo condiciones adversas. Estos son los dos constructores:
ServerSocket (int puerto)

Pgina 11

Algoritmos y Lenguajes III

Sockets

Crea un conector de servidor en el puerto especificado (puerto), con una longitud de cola igual a 50.
ServerSocket (int puerto, int nmero)

Crea un conec tor de servidor en el puerto especificado con una longitud de cola igual al nmero especificado. ServerSocket tiene un mtodo adicional llamado accept ( ), que es una llamada que se bloquea y que espera a que un cliente inicie la comunicacin y despus devuelve un Socket normal que es el que se utiliza para la comunicacin con el cliente.

La instruccin: ServerSocket conexinServidor = new ServerSocket(8000); le indica al sistema operativo que se intenta ofrecer un servicio en el puerto 8000. (an no est escuchando en este puerto). Si el entorno de tiempo de ejecucin es capaz de enlazar al puerto especificado, lo hace, y configura la acumulacin permitida a un valor predeterminado de 50. (Esto significa que una vez que tenga 50 peticiones de conexin, se rechazarn todas las peticiones sucesivas. Se puede especificar un valor de acumulacin diferente en el conector ServerSocket). Si el entorno de tiempo de ejecucin no puede enlazar al puerto (lo que ocurre cuando el puerto ya est reservado a otro servicio), lanzar una IOException. Una vez se haya enlazado el puerto, es posible empezar a escuchar las conexiones llamando a accept(): Socket unSocket = conexinServidor.accept(); Una vez hecha la conexin, accept() desbloquea el sistema y devuelve un Socket. En ste, se puede abrir streams, readers, y writers, al igual que se hizo desde el programa del cliente.

Ejemplo2: Ping en Java

Ping (Packet InterNet Groper) es un comando estndar de TCP/IP que enva permite solicitar un mensajes de respuesta a un computador de la red o un gateway. En otras palabras, ping enva un mensaje, para verificar si el computador al cual lo enva est conectado y disponible en la red. Ping enva un mensaje a un computador de la red y le avisa al usuario si recibe o no una respuesta de ese computador. Enviar el mensaje a un computador es trivial: slo debe abrirse un socket en el host y escribir hacia l. Java hace todo el trabajo de ensamblar los bytes en paquetes y enviarlos. La nica duda podra ser cul puerto utilizar. Hay muchos servicios TCP/IP estndar. El puerto 7 es el servicio de echo o reenvo, y el puerto 23 es el de telnet. En este ejemplo, se va a utilizar el puerto 13, que es el puerto de la fecha del sistema, y puede aceptar consultas TCP o UDP. Cuando se establece una conexin

Pgina 12

Algoritmos y Lenguajes III

Sockets

con el puerto 13 en un computador, este responde con un mensaje sencillo, que incluye la fecha y hora actuales del computador.
import java.io.*; import java.net.*; public class Ping { public static void main(java.lang.String[] args) throws Exception { if (args.length!=1) { System.out.println("Debe especificarse el <systemname> como parmetro"); System.exit(0); } String machine = args[0]; final int daytimeport = 13; Socket so = new Socket(machine, daytimeport); BufferedReader br = new BufferedReader ( new InputStreamReader (so.getInputStream())); String timestamp = br.readLine(); System.out.println( machine + " responde en: " + timestamp); } }

Al ejecutar el programa, debe obtenerse una respuesta como la siguiente:

Esto demuestra lo fcil que es crear una conexin socket a un puerto de otro computador, utilizando la librera de red de Java.

Pgina 13

Algoritmos y Lenguajes III

Sockets

Ejemplo 3: Envo de un e-mail con Java

Un e-mail es enviado mediante una conexin socket con el puerto 25 de un computador. Todo lo que se har en este ejemplo ser abrir un socket conectado al puerto 25 de un computador, y enviar mensajes de protocolo de correo hacia el programa servidor (demonio) del otro extremo. En un applet, se debe abrir un socket de retorno al servidor. En una aplicacin, se puede abrir un socket en el mismo sistema en el cual se est ejecutando el programa. Si se utilizan correctamente los mensajes del protocolo de correo, el sistema los entender y enviar el e-mail. Este programa requiere que el programa SMTP (Simple Mail Transfer Protocol) se est ejecutando en el servidor. Esto puede probarse haciendo telnet al puerto 25 del servidor, y verificar si se obtiene respuesta. El cdigo del programa es el siguiente:
import java.io.*; import java.net.*; public class Email { public static void main(java.lang.String[] args) throws IOException{ Socket sock = new Socket("donatello",25); BufferedReader dis = new BufferedReader( new InputStreamReader(sock.getInputStream())); PrintStream ps = new PrintStream (sock.getOutputStream()); ps.println("mail from: cooperativos@donatello.icesi.edu.co"); System.out.println(dis.readLine()); String Address = "larboled@donatello.icesi.edu.co"; ps.println("rcpt to: "+ Address); System.out.println(dis.readLine()); ps.println("data"); System.out.println( dis.readLine() ); ps.println("This is the message\n that Java sent"); ps.println("."); System.out.println( dis.readLine() ); ps.flush(); sock.close(); } }

Pgina 14

Algoritmos y Lenguajes III

Sockets

Muchos de los servicios de Internet son similares a este. Se establece una conexin socket y se utiliza un protocolo simple para comunicarle al servidor lo que se desea hacer.

Pgina 15